summaryrefslogtreecommitdiff
blob: c7a1dadf8a853338ac7031f428f1f8350042c7cc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-apps/man/man-1.6g-r1.ebuild,v 1.1 2015/05/08 03:22:04 vapier Exp $

EAPI="4"

inherit eutils toolchain-funcs user flag-o-matic prefix

DESCRIPTION="Standard commands to read man pages"
HOMEPAGE="http://primates.ximian.com/~flucifredi/man/"
SRC_URI="http://primates.ximian.com/~flucifredi/man/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="+lzma nls selinux"

DEPEND="nls? ( sys-devel/gettext )"
RDEPEND="|| ( >=sys-apps/groff-1.19.2-r1 app-doc/heirloom-doctools )
	!sys-apps/man-db
	!<app-arch/lzma-4.63
	lzma? ( app-arch/xz-utils )
	selinux? ( sec-policy/selinux-makewhatis )"

pkg_setup() {
	enewgroup man 15
	enewuser man 13 -1 ${EPREFIX}/usr/share/man man
}

src_prepare() {
	epatch "${FILESDIR}"/man-1.6f-man2html-compression-2.patch
	epatch "${FILESDIR}"/man-1.6-cross-compile.patch
	epatch "${FILESDIR}"/man-1.6f-unicode.patch #146315
	epatch "${FILESDIR}"/man-1.6c-cut-duplicate-manpaths.patch
	epatch "${FILESDIR}"/man-1.5m2-apropos.patch
	epatch "${FILESDIR}"/man-1.6g-fbsd.patch #138123
	epatch "${FILESDIR}"/man-1.6e-headers.patch
	epatch "${FILESDIR}"/man-1.6f-so-search-2.patch
	epatch "${FILESDIR}"/man-1.6g-compress.patch #205147
	epatch "${FILESDIR}"/man-1.6f-parallel-build.patch #207148 #258916
	epatch "${FILESDIR}"/man-1.6g-xz.patch #302380
	epatch "${FILESDIR}"/man-1.6f-makewhatis-compression-cleanup.patch #331979
	epatch "${FILESDIR}"/man-1.6g-echo-escape.patch #523874
	# make sure `less` handles escape sequences #287183
	sed -i -e '/^DEFAULTLESSOPT=/s:"$:R":' configure

	# This patch could be easily merged with the FreeBSD one, but we don't
	# because the files have no CVS header and then auto syncing overwrites the
	# local difference we make.  <grobian@gentoo.org>
	epatch "${FILESDIR}"/man-1.6g-bsdish.patch
	# Solaris needs fcntl.h included for O_CREAT etc, like SYSV
	epatch "${FILESDIR}"/man-1.6e-solaris.patch
	# Results in grabbing as much tools from the prefix, instead of main
	# system in a prefixed environment
	epatch "${FILESDIR}"/man-1.6g-prefix-path.patch

	# Fix the makewhatis script for prefix.
	cp "${FILESDIR}"/makewhatis.cron "${T}"/
	pushd "${T}" > /dev/null
	epatch "${FILESDIR}"/makewhatis.cron-prefix.patch
	popd > /dev/null
	eprefixify "${T}"/makewhatis.cron

	# fix man.conf file, bug #351245
	sed -i \
		-e "/^MANPATH\t/s:\t/:\t${EPREFIX}/:" \
		-e "/^MANPATH_MAP\t/s:\t/:\t${EPREFIX}/:g" \
		src/man.conf.in || die

	if use prefix ; then
		ebegin "Allowing unpriviliged install"
		sed -i \
			-e 's/@man_install_flags@//g' \
			"${S}"/src/Makefile.in
		eend $?
		(
			local d cat=() dflt
			dflt=( $(sed -n '/^tmpsections=/s/^[^"]\+"\([^"]\+\)".*$/\1/p' \
				configure) )
			IFS=:
			for d in /usr/share/man/man* ; do
				[[ -d ${d} ]] || continue
				[[ ":${dflt[*]}:" == *":${d##*man}:"* ]] \
					|| cat+=( ${d##*man} )
			done
			if [[ ${#cat[@]} -gt 0 ]] ; then
				einfo "Adding host manpage sections: ${cat[*]}"
				sed -i -e "/^MANSECT\t/s/\$/:${cat[*]}/" src/man.conf.in || die
			fi
		)
	fi

}

echoit() { echo "$@" ; "$@" ; }
src_configure() {
	strip-linguas $(eval $(grep ^LANGUAGES= configure) ; echo ${LANGUAGES//,/ })

	unset NLSPATH #175258

	tc-export CC BUILD_CC

	local mylang=
	if use nls ; then
		if [[ -z ${LINGUAS} ]] ; then
			mylang="all"
		else
			mylang="${LINGUAS// /,}"
		fi
	else
		mylang="none"
	fi

	local myconf=
	use prefix || myconf="${myconf} +sgid"

	export COMPRESS
	if use lzma ; then
		COMPRESS="${EPREFIX}"/usr/bin/xz
	else
		COMPRESS="${EPREFIX}"/bin/bzip2
	fi
	echoit \
	./configure \
		-prefix="${EPREFIX}/usr" \
		-confdir="${EPREFIX}"/etc \
		${myconf} \
		+fhs \
		+lang ${mylang} \
		|| die "configure failed"
}

src_install() {
	unset NLSPATH #175258

	emake DESTDIR="${D}" install || die "make install failed"
	dosym man /usr/bin/manpath

	dodoc LSM README* TODO

	# Make all Solaris man-pages available
	if [[ ${CHOST} == *-solaris* && -e /usr/share/man/man.cf ]] ; then
		source /usr/share/man/man.cf
		sed -i -e 's/^\(MANSECT.*\)$/\1:'"${MANSECTS//,/:}"'/' \
			"${ED}"/etc/man.conf || die "failed to adapt to Solaris"
	fi

	# makewhatis only adds man-pages from the last 24hrs
	exeinto /etc/cron.daily
	newexe "${T}"/makewhatis.cron makewhatis

	keepdir /var/cache/man
	use prefix || diropts -m0775 -g man && diropts -m0775
	local mansects=$(grep ^MANSECT "${ED}"/etc/man.conf | cut -f2-)
	for x in ${mansects//:/ } ; do
		keepdir /var/cache/man/cat${x}
	done
}

pkg_postinst() {
	if use !prefix ; then

	einfo "Forcing sane permissions onto ${EROOT}var/cache/man (Bug #40322)"
	chown -R root:man "${EROOT}"/var/cache/man
	[[ -e ${EROOT}/var/cache/man/whatis ]] \
		&& chown root:0 "${EROOT}"/var/cache/man/whatis

	fi # end lame indenting

	chmod -R g+w "${EROOT}"/var/cache/man

	echo

	local f files=$(ls "${EROOT}"/etc/cron.{daily,weekly}/makewhatis{,.cron} 2>/dev/null)
	for f in ${files} ; do
		[[ ${f} == */etc/cron.daily/makewhatis ]] && continue
		[[ $(md5sum "${f}") == "8b2016cc778ed4e2570b912c0f420266 "* ]] \
			&& rm -f "${f}"
	done
	files=$(ls "${EROOT}"etc/cron.{daily,weekly}/makewhatis{,.cron} 2>/dev/null)
	if [[ ${files/$'\n'} != ${files} ]] ; then
		ewarn "You have multiple makewhatis cron files installed."
		ewarn "You might want to delete all but one of these:"
		ewarn ${files}
	fi

	if has_version app-doc/heirloom-doctools; then
		ewarn "Please note that the /etc/man.conf file installed will not"
		ewarn "work with heirloom's nroff by default (yet)."
		ewarn ""
		ewarn "Check app-doc/heirloom-doctools elog messages for the proper"
		ewarn "configuration."
	fi
}