1 # Copyright 1999-2017 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
6 inherit bsdmk freebsd flag-o-matic pam multilib multibuild multilib-build
8 DESCRIPTION="FreeBSD's base system source for /usr/bin"
10 IUSE="ar atm audit bluetooth ipv6 kerberos netware nis ssl usb build zfs"
11 LICENSE="BSD zfs? ( CDDL )"
13 # Security Advisory and Errata patches.
16 if [[ ${PV} != *9999* ]]; then
17 KEYWORDS="~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
19 $(freebsd_upstream_patches)"
31 RDEPEND="=sys-freebsd/freebsd-lib-${RV}*[usb?,bluetooth?,${MULTILIB_USEDEP}]
32 ssl? ( dev-libs/openssl:0= )
33 kerberos? ( virtual/krb5 )
34 ar? ( >=app-arch/libarchive-3 )
37 >=sys-libs/ncurses-5.9:0=
38 !sys-process/fuser-bsd
41 !sys-freebsd/freebsd-contrib"
45 !build? ( =sys-freebsd/freebsd-sources-${RV}* )
46 =sys-freebsd/freebsd-sbin-${RV}*
47 =sys-freebsd/freebsd-mk-defs-${RV}*"
50 >=sys-auth/pambase-20080219.1
53 S="${WORKDIR}/usr.bin"
55 PATCHES=( "${FILESDIR}/${PN}-6.0-bsdcmp.patch"
56 "${FILESDIR}/${PN}-11.1-fixmakefiles.patch"
57 "${FILESDIR}/${PN}-11.0-setXid.patch"
58 "${FILESDIR}/${PN}-lint-stdarg.patch"
59 "${FILESDIR}/${PN}-9.1-bsdar.patch"
60 "${FILESDIR}/${PN}-10.2-talk-workaround.patch"
61 "${FILESDIR}/${PN}-10.2-bsdxml.patch" )
63 # Here we remove some sources we don't need because they are already
64 # provided by portage's packages or similar. In order:
65 # - Archiving tools, provided by their own ebuilds
72 # and the rest are misc utils we already provide somewhere else.
73 REMOVE_SUBDIRS="bzip2 bzip2recover tar cpio
80 rsh rlogin rusers rwho ruptime
81 compile_et lex vi smbutil file vacation nc ftp telnet
85 addr2line bsdcat cxxfilt cxxfilt elfcopy nm readelf sdiff size soelim strings"
88 # Add the required source files.
89 use zfs && EXTRACTONLY+="cddl/ "
90 use build && EXTRACTONLY+="sys/ "
91 use nis && EXTRACTONLY+="usr.sbin/ypserv/ "
93 use atm || mymakeopts="${mymakeopts} WITHOUT_ATM= "
94 use audit || mymakeopts="${mymakeopts} WITHOUT_AUDIT= "
95 use bluetooth || mymakeopts="${mymakeopts} WITHOUT_BLUETOOTH= "
96 use ipv6 || mymakeopts="${mymakeopts} WITHOUT_INET6= WITHOUT_INET6_SUPPORT= "
97 use kerberos || mymakeopts="${mymakeopts} WITHOUT_KERBEROS_SUPPORT= "
98 use netware || mymakeopts="${mymakeopts} WITHOUT_IPX= WITHOUT_IPX_SUPPORT= WITHOUT_NCP= "
99 use nis || mymakeopts="${mymakeopts} WITHOUT_NIS= "
100 use ssl || mymakeopts="${mymakeopts} WITHOUT_OPENSSL= "
101 use usb || mymakeopts="${mymakeopts} WITHOUT_USB= "
102 use zfs || mymakeopts="${mymakeopts} WITHOUT_CDDL= "
103 mymakeopts="${mymakeopts} WITHOUT_CLANG= WITHOUT_LZMA_SUPPORT= WITHOUT_SVN= WITHOUT_SVNLITE= WITHOUT_OPENSSH= WITHOUT_LDNS_UTILS= WITHOUT_MANDOCDB= WITHOUT_GPL_DTC= "
107 # bison installs a /usr/bin/yacc symlink ...
108 # we need to remove it to avoid triggering
109 # collision-protect errors
110 if [[ -L ${ROOT}/usr/bin/yacc ]] ; then
111 rm -f "${ROOT}"/usr/bin/yacc
116 if [[ ! -e "${WORKDIR}/sys" ]]; then
117 use build || ln -s "/usr/src/sys" "${WORKDIR}/sys"
120 # Rename manpage for renamed cmp
121 mv "${S}"/cmp/cmp.1 "${S}"/cmp/bsdcmp.1 || die
122 # Rename manpage for renamed ar
123 mv "${S}"/ar/ar.1 "${S}"/ar/freebsd-ar.1 || die
124 # Fix whereis(1) manpath search.
125 sed -i -e 's:"manpath -q":"manpath":' "${S}/whereis/pathnames.h"
127 # Build a dynamic make
128 sed -i -e '/^NO_SHARED/ s/^/#/' "${S}"/bmake/Makefile.inc || die
130 # Disable it here otherwise our patch wont apply
131 use ar || dummy_mk ar
133 # Preparing to build xlint
137 setup_multilib_vars() {
138 if ! multilib_is_native_abi ; then
139 cd "${WORKDIR}/usr.bin/ldd" || die
140 export mymakeopts="${mymakeopts} PROG=ldd32 WITHOUT_MAN="
148 local MULTIBUILD_VARIANTS="${DEFAULT_ABI}"
149 # Preparing to build addr2line, elfcopy, m4, getaddrinfo
150 for dir in libelftc libpe libopenbsd libnetbsd; do
151 cd "${WORKDIR}/lib/${dir}" || die
152 multibuild_foreach_variant freebsd_multilib_multibuild_wrapper freebsd_src_compile -j1
155 MULTIBUILD_VARIANTS=( $(multilib_get_enabled_abis) )
156 multibuild_foreach_variant freebsd_multilib_multibuild_wrapper setup_multilib_vars freebsd_src_compile -j1
160 cd "${S}"/calendar/calendars || die
161 for dir in $(find . -type d ! -name "." ) ; do
162 dodir /usr/share/calendar/"$(basename ${dir})"
165 local MULTIBUILD_VARIANTS=( $(multilib_get_enabled_abis) )
166 multibuild_foreach_variant freebsd_multilib_multibuild_wrapper setup_multilib_vars freebsd_src_install
168 # baselayout requires these in /bin
170 for bin in sed printf ; do
171 mv "${D}/usr/bin/${bin}" "${D}/bin/" || die "mv ${bin} failed"
172 dosym /bin/${bin} /usr/bin/${bin} || die "dosym ${bin} failed"
175 for pamdfile in login passwd su; do
176 newpamd "${FILESDIR}/${pamdfile}.1.pamd" ${pamdfile} || die
179 cd "${WORKDIR}/etc" || die
181 doins remote phones opieaccess fbtab || die
183 exeinto /etc/cron.daily
184 newexe "${FILESDIR}/locate-updatedb-cron" locate.updatedb || die
186 # tip requires /var/spool/lock/, bug #200700
187 keepdir /var/spool/lock
189 # create locate database #472468
190 local f=/var/db/locate.database
191 mkdir "${ED}${f%/*}" || die
192 touch "${ED}${f}" || die
193 fowners nobody:nobody ${f}
197 # We need to ensure that login.conf.db is up-to-date.
198 if [[ -e "${ROOT}"etc/login.conf ]] ; then
199 einfo "Updating ${ROOT}etc/login.conf.db"
200 "${ROOT}"usr/bin/cap_mkdb -f "${ROOT}"etc/login.conf "${ROOT}"etc/login.conf
201 elog "Remember to run cap_mkdb /etc/login.conf after making changes to it"
206 # and if we uninstall yacc but keep bison,
207 # lets restore the /usr/bin/yacc symlink
208 if [[ ! -e ${ROOT}/usr/bin/yacc ]] && [[ -e ${ROOT}/usr/bin/yacc.bison ]] ; then
209 ln -s yacc.bison "${ROOT}"/usr/bin/yacc