commit:     3524b85eb813d017c7fa32843a3949d065ab2d6b
Author:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
AuthorDate: Sat Feb 18 15:27:51 2017 +0000
Commit:     Michael Orlitzky <mjo <AT> gentoo <DOT> org>
CommitDate: Sat Feb 18 16:13:22 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3524b85e

net-libs/c-client: new revision building the "slx" target with USE="-pam".

The build system for c-client supports a few different targets. When
USE=pam was not set, we were using the "lnx" target, which supposes
that the crypt() function is available directly in libc. That is not
the case in Gentoo, but things usually worked out when libcrypt was
linked in transitively (by, say, PHP).

However, the "gold" linker is more strict than "bfd" with regard to
transitive dependencies. The gold linker treats them as superfluous
and mercilessly prunes them; thus c-client could wind up with no
crypt() function when the gold linker was used: c-client was not
linking with -lcrypt itself, and even though consumers might be
linking in c-client with -lcrypt, the crypt library appeared unused
and would be omitted.

By switching from the "lnx" target to "slx", we ensure that -lcrypt is
passed to the linker when it links c-client itself. Thus the crypt()
function is where it is expected to be, and the associated PHP build
failure is resolved. I was unable to reproduce a related bug in
mail-client/alpine.

I added two (unrelated) missing "die" statements to the ebuild while I
was at it.

This non-maintainer commit was with permission from robbat2.

Gentoo-Bug: 456928
Gentoo-Bug: 545086

Package-Manager: portage-2.3.3

 net-libs/c-client/c-client-2007f-r6.ebuild | 150 +++++++++++++++++++++++++++++
 1 file changed, 150 insertions(+)

diff --git a/net-libs/c-client/c-client-2007f-r6.ebuild 
b/net-libs/c-client/c-client-2007f-r6.ebuild
new file mode 100644
index 0000000000..fc6ce38b6a
--- /dev/null
+++ b/net-libs/c-client/c-client-2007f-r6.ebuild
@@ -0,0 +1,150 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI=6
+inherit flag-o-matic eutils libtool toolchain-funcs multilib
+
+MY_PN=imap
+MY_P="${MY_PN}-${PV}"
+S=${WORKDIR}/${MY_P}
+
+CHAPPA_PL=115
+DESCRIPTION="UW IMAP c-client library"
+HOMEPAGE="http://www.washington.edu/imap/";
+SRC_URI="ftp://ftp.cac.washington.edu/imap/${MY_P}.tar.Z
+       chappa? ( mirror://gentoo/${P}-chappa-${CHAPPA_PL}-all.patch.gz )"
+
+LICENSE="Apache-2.0"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc 
~x86 ~amd64-fbsd ~x86-fbsd"
+IUSE="doc +ipv6 kerberos kernel_linux kernel_FreeBSD libressl pam ssl 
static-libs topal chappa"
+
+RDEPEND="
+       ssl? (
+               !libressl? ( dev-libs/openssl:0= )
+               libressl? ( dev-libs/libressl:0= ) )
+       !net-mail/uw-imap
+       kerberos? ( app-crypt/mit-krb5 )
+"
+DEPEND="${RDEPEND}
+       kernel_linux? ( pam? ( >=sys-libs/pam-0.72 ) )
+"
+
+src_prepare() {
+       default
+
+       # Tarball packed with bad file perms
+       chmod -R u+rwX,go-w . || die "failed to fix permissions"
+
+       # lots of things need -fPIC, including various platforms, and this 
library
+       # generally should be built with it anyway.
+       append-flags -fPIC
+
+       # Modifications so we can build it optimally and correctly
+       sed \
+               -e "s:BASECFLAGS=\".*\":BASECFLAGS=:g" \
+               -e 's:SSLDIR=/usr/local/ssl:SSLDIR=/usr:g' \
+               -e 's:SSLCERTS=$(SSLDIR)/certs:SSLCERTS=/etc/ssl/certs:g' \
+               -i src/osdep/unix/Makefile \
+               || die "failed to fix compiler flags and SSL paths in the 
Makefile"
+
+       # Make the build system more multilib aware
+       sed \
+               -e "s:^SSLLIB=\$(SSLDIR)/lib:SSLLIB=\$(SSLDIR)/$(get_libdir):" \
+               -e "s:^AFSLIB=\$(AFSDIR)/lib:AFSLIB=\$(AFSDIR)/$(get_libdir):" \
+               -i src/osdep/unix/Makefile \
+               || die "failed to fix our libdir in the Makefile"
+
+       # Targets should use the Gentoo (ie linux) fs
+       sed -e '/^bsf:/,/^$/ s:ACTIVEFILE=.*:ACTIVEFILE=/var/lib/news/active:g' 
\
+               -i src/osdep/unix/Makefile \
+               || die "failed to fix the FreeBSD ACTIVEFILE path in the 
Makefile"
+
+       # Apply a patch to only build the stuff we need for c-client
+       eapply "${FILESDIR}/${PN}-2006k_GENTOO_Makefile.patch"
+
+       # Apply patch to add the compilation of a .so for PHP
+       # This was previously conditional, but is more widely useful.
+       eapply "${FILESDIR}/${PN}-2006k_GENTOO_amd64-so-fix.patch"
+
+       # Remove the pesky checks about SSL stuff
+       sed -e '/read.*exit/d' -i Makefile \
+               || die "failed to disable SSL warning in the Makefile"
+
+       # Respect LDFLAGS
+       eapply "${FILESDIR}/${PN}-2007f-ldflags.patch"
+       sed -e "s/CC=cc/CC=$(tc-getCC)/" \
+               -e "s/ARRC=ar/ARRC=$(tc-getAR)/" \
+               -e "s/RANLIB=ranlib/RANLIB=$(tc-getRANLIB)/" \
+               -i src/osdep/unix/Makefile \
+               || die "failed to fix build flags support in the Makefile"
+
+       use topal && eapply "${FILESDIR}/${P}-topal.patch"
+       use chappa && epatch "${DISTDIR}/${P}-chappa-${CHAPPA_PL}-all.patch.gz"
+
+       elibtoolize
+}
+
+src_compile() {
+       local mymake ipver ssltype target passwdtype
+       ipver='IP=4'
+       if use ipv6 ; then
+               ipver="IP=6"
+               touch ip6 || die "failed to create ip6 file"
+       fi
+       use ssl && ssltype="unix" || ssltype="none"
+       if use kernel_linux ; then
+               # Fall back to "slx" when USE=pam is not set. This ensures that
+               # we link in libcrypt to get the crypt() routine (bug #456928).
+               use pam && target=lnp passwdtype=pam || target=slx 
passwdtype=std
+       elif use kernel_FreeBSD ; then
+               target=bsf passwdtype=pam
+       fi
+       use kerberos \
+               && mymake="EXTRAAUTHENTICATORS=gss" \
+               && EXTRALIBS="-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" \
+       # no parallel builds supported!
+       emake -j1 SSLTYPE=${ssltype} $target \
+               PASSWDTYPE=${passwdtype} ${ipver} ${mymake} \
+               EXTRACFLAGS="${CFLAGS}" \
+               EXTRALDFLAGS="${LDFLAGS}" \
+               EXTRALIBS="${EXTRALIBS}" \
+               GSSDIR=/usr
+}
+
+src_install() {
+       if use static-libs; then
+               # Library binary
+               dolib.a c-client/c-client.a
+               dosym c-client.a "/usr/$(get_libdir)/libc-client.a"
+       fi
+
+       # Now the shared library
+       dolib.so c-client/libc-client.so.1.0.0
+
+       dosym libc-client.so.1.0.0 "/usr/$(get_libdir)/libc-client.so"
+       dosym libc-client.so.1.0.0 "/usr/$(get_libdir)/libc-client.so.1"
+
+       # Headers
+       insinto /usr/include/imap
+       doins src/osdep/unix/*.h
+       doins src/c-client/*.h
+       doins c-client/linkage.h
+       doins c-client/linkage.c
+       doins c-client/osdep.h
+
+       if use ssl; then
+               echo "  ssl_onceonlyinit ();" >> 
"${D}"/usr/include/imap/linkage.c \
+                       || die "failed to add ssl init statement to linkage.c"
+       fi
+
+       # Documentation
+       dodoc README docs/*.txt docs/BUILD docs/CONFIG docs/RELNOTES 
docs/SSLBUILD
+       if use doc; then
+               docinto rfc
+               dodoc docs/rfc/*.txt
+               docinto draft
+               dodoc docs/draft/*
+       fi
+}

Reply via email to