diff options
author | Sam James <sam@gentoo.org> | 2023-02-06 03:56:03 +0000 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2023-02-06 03:58:50 +0000 |
commit | bcd6b6d96343c2a56ed7f0df97dc9ec13daa94c9 (patch) | |
tree | a01062c684bd384c40f1393e28486e119d19928b /net-libs | |
parent | dev-db/mariadb: restore gcc-13 patch (diff) | |
download | gentoo-bcd6b6d96343c2a56ed7f0df97dc9ec13daa94c9.tar.gz gentoo-bcd6b6d96343c2a56ed7f0df97dc9ec13daa94c9.tar.bz2 gentoo-bcd6b6d96343c2a56ed7f0df97dc9ec13daa94c9.zip |
net-libs/c-client: add 2007f_p7
One of our patches (c-client-2007f-openssl-1.1.patch, which seems
to have been from - or derived from at least - openwrt at
https://github.com/openwrt/packages/commit/b087da8530a8889bd7c765dddbbe218116d11643)
has been causing issues with OpenSSL 1.1 by not giving proper regard
to the return value of ssl_validate_cert.
There's a suggested alternative fixed patch in the bug, but given that
c-client is one of those zombie packages we need to keep but isn't
active upstream, let's try switching to Debian's patchset, as it
works for them, and the effective diff comparing prepared sources before/after
is pretty small overall.
(We also end up cleaning up a few things, like the library stops exporting
'Gethostbyname' (with a capital G) and such.)
Scott Tester <scott@smbc.edu.au> deserves a special mention for being persistent
here. Thank you!
Bug: https://bugs.gentoo.org/647616
Closes: https://bugs.gentoo.org/683708
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'net-libs')
5 files changed, 264 insertions, 0 deletions
diff --git a/net-libs/c-client/Manifest b/net-libs/c-client/Manifest index a84c4a83e18d..6a0e06458996 100644 --- a/net-libs/c-client/Manifest +++ b/net-libs/c-client/Manifest @@ -1,2 +1,3 @@ DIST c-client-2007f-chappa-115-all.patch.gz 30571 BLAKE2B 707ec7718f764d5fea4142a4e0c4dd561d0a387cb72fea16de656a01bc21a0b30600dc121c8af090b76188d0131852ca6f3d40b9bba8745696faed5a79fb8c59 SHA512 f44489ec38aa6a3dc682872a6857154254c23352db81ee380dfdfad39743234d97a8bcc07a74459f7532efe2fc073cf7d9c078433e11a95de19beeb387ff8b65 DIST imap-2007f.tar.Z 2793529 BLAKE2B f5b597551ef56d284180cd49cf6b7d01a63ee60bcb513a354bd7ec63428184b854e3ea666a9f3ce1f5b27699cf81d2f1d0e66e5cfc7fee93d723bb146d113ec7 SHA512 2c728deaf66d23158c61ae55ff94f05d2a1cf0168002760321ca30c6ee1c58c0a4c7bc14ece0097ea662df6c7c49be3b91c8e5e943724c9e2736800fa9298dae +DIST uw-imap_2007f~dfsg-7.debian.tar.xz 44960 BLAKE2B 836dfd9a5922cd3043278a89c87276c974c8e91c5831a94caef6e73b2839d246bda879f67bdad88ae59888b5dc8b6ca366aa48b6d197508cd10cdc68f1e7027f SHA512 3a903062c782c942d4c7a1122be686e301ea4d4c6f6ff1dbc78ae29c7ee7b8e02fb25a903401e6a7047ddccaf6bcceba953f6cad1c1890cd6410ea909b014af6 diff --git a/net-libs/c-client/c-client-2007f_p7.ebuild b/net-libs/c-client/c-client-2007f_p7.ebuild new file mode 100644 index 000000000000..c3fd74b4a8a9 --- /dev/null +++ b/net-libs/c-client/c-client-2007f_p7.ebuild @@ -0,0 +1,172 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +inherit flag-o-matic libtool toolchain-funcs + +MY_PN=imap +MY_P="${MY_PN}-${PV}" + +CHAPPA_PL=115 +DESCRIPTION="UW IMAP c-client library" +HOMEPAGE="http://www.washington.edu/imap/" +SRC_URI=" + ftp://ftp.cac.washington.edu/imap/${MY_PN}-$(ver_cut 1-2).tar.Z + mirror://debian/pool/main/u/uw-${MY_PN}/uw-${MY_PN}_${PV/_p/"~dfsg-"}.debian.tar.xz + chappa? ( mirror://gentoo/${PN}-$(ver_cut 1-2)-chappa-${CHAPPA_PL}-all.patch.gz ) +" +S="${WORKDIR}"/${MY_PN}-$(ver_cut 1-2) + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86" +IUSE="doc +ipv6 kerberos pam ssl static-libs topal chappa" + +RDEPEND=" + ssl? ( + dev-libs/openssl:= + ) + kernel_linux? ( + pam? ( >=sys-libs/pam-0.72 ) + !pam? ( virtual/libcrypt:= ) + ) + kerberos? ( app-crypt/mit-krb5 ) +" +DEPEND="${RDEPEND}" + +PATCHES=( + "${WORKDIR}"/debian/patches + + # Apply a patch to only build the stuff we need for c-client + "${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. + "${FILESDIR}/${PN}-2007f_GENTOO_amd64-so-fix.patch" + + # Respect LDFLAGS + "${FILESDIR}/${PN}-2007f_p7-ldflags.patch" + + # build fix for -Werror=implicit-function-declaration and + # incompatible function pointer types, bug #870478 + "${FILESDIR}/${PN}-2007f-scandir-callback-types.patch" + "${FILESDIR}/${PN}-2007f_p7-implicit-declaration-fix.patch" +) + +src_prepare() { + use topal && PATCHES+=( "${FILESDIR}/${P}-topal.patch" ) + + default + + use chappa && eapply -p2 "${WORKDIR}/${P}-chappa-${CHAPPA_PL}-all.patch" + + # 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" + + # Remove the pesky checks about SSL stuff + sed -e '/read.*exit/d' -i Makefile \ + || die "failed to disable SSL warning in the Makefile" + + 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" + + elibtoolize +} + +src_compile() { + local mymake target passwdtype + + local ipver='IP=4' + if use ipv6 ; then + ipver="IP=6" + touch ip6 || die "failed to create ip6 file" + fi + + local ssltype="none" + if use ssl ; then + ssltype="unix" + fi + + 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=lnps passwdtype=pam || target=slx passwdtype=std + fi + + if use kerberos ; then + mymake="EXTRAAUTHENTICATORS=gss" + EXTRALIBS="-lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" + fi + + 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 +} diff --git a/net-libs/c-client/files/c-client-2007f_GENTOO_amd64-so-fix.patch b/net-libs/c-client/files/c-client-2007f_GENTOO_amd64-so-fix.patch new file mode 100644 index 000000000000..3a3be7221185 --- /dev/null +++ b/net-libs/c-client/files/c-client-2007f_GENTOO_amd64-so-fix.patch @@ -0,0 +1,12 @@ +--- a/src/osdep/unix/Makefile ++++ b/src/osdep/unix/Makefile +@@ -990,6 +990,9 @@ onceenv: + -DLOCKPGM3=\"$(LOCKPGM3)\" > OSCFLAGS + echo $(BASELDFLAGS) $(EXTRALDFLAGS) > LDFLAGS + echo "$(ARRC) $(ARCHIVE) $(BINARIES) $(LIBRARIES);$(RANLIB) $(ARCHIVE)" > ARCHIVE ++ echo "`$(CAT) CCTYPE` `$(CAT) CFLAGS` `$(CAT) OSFLAGS` -shared \ ++ -Wl,-soname,libc-client.so.1 -o libc-client.so.1.0.0 $(BINARIES)" \ ++ >> ARCHIVE + echo $(ARCHIVE) > ARCHIVENAME + echo $(OS) > OSTYPE + ./drivers $(EXTRADRIVERS) $(DEFAULTDRIVERS) dummy diff --git a/net-libs/c-client/files/c-client-2007f_p7-implicit-declaration-fix.patch b/net-libs/c-client/files/c-client-2007f_p7-implicit-declaration-fix.patch new file mode 100644 index 000000000000..413ddbf43869 --- /dev/null +++ b/net-libs/c-client/files/c-client-2007f_p7-implicit-declaration-fix.patch @@ -0,0 +1,46 @@ +This patch solves build issues with -Werror=implicit-function-declaration +enabled. + +- safe_flock is a function from flocklnx.c but header file for consumers + is missing, the simplest was to add function prototype to other + header file. +- utime.h is needed also in multiple places but os_slx.h header file is + used in all of them + +Bug: https://bugs.gentoo.org/870478 +--- a/src/osdep/unix/os_lnx.h ++++ b/src/osdep/unix/os_lnx.h +@@ -46,6 +46,7 @@ + #include <sys/types.h> + #include <dirent.h> + #include <time.h> /* for struct tm */ ++#include <utime.h> + #include <fcntl.h> + #include <syslog.h> + #include <sys/file.h> +@@ -57,6 +58,7 @@ + + #define direct dirent + ++int safe_flock(int, int); + #define flock safe_flock + + +--- a/src/osdep/unix/os_slx.h ++++ b/src/osdep/unix/os_slx.h +@@ -46,6 +46,7 @@ + #include <sys/types.h> + #include <dirent.h> + #include <time.h> /* for struct tm */ ++#include <utime.h> + #include <fcntl.h> + #include <syslog.h> + #include <sys/file.h> +@@ -57,6 +58,7 @@ + + #define direct dirent + ++int safe_flock(int, int); + #define flock safe_flock + + diff --git a/net-libs/c-client/files/c-client-2007f_p7-ldflags.patch b/net-libs/c-client/files/c-client-2007f_p7-ldflags.patch new file mode 100644 index 000000000000..8a273355c2f9 --- /dev/null +++ b/net-libs/c-client/files/c-client-2007f_p7-ldflags.patch @@ -0,0 +1,33 @@ +--- a/src/osdep/unix/Makefile ++++ b/src/osdep/unix/Makefile +@@ -975,23 +975,24 @@ os_sol.h: + + # Once-only environment setup + +-once: onceenv ckp$(PASSWDTYPE) ssl$(SSLTYPE) osdep.c ++once: ssl$(SSLTYPE) onceenv ckp$(PASSWDTYPE) osdep.c + + onceenv: + @echo Once-only environment setup... + echo $(CC) > CCTYPE +- echo $(BASECFLAGS) '$(EXTRACFLAGS)' -DCHUNKSIZE=$(CHUNKSIZE) > CFLAGS +- echo -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \ ++ echo `$(CAT) CFLAGS` $(BASECFLAGS) '$(EXTRACFLAGS)' -DCHUNKSIZE=$(CHUNKSIZE) > CFLAGS ++ echo `$(CAT) OSCFLAGS` -DCREATEPROTO=$(CREATEPROTO) -DEMPTYPROTO=$(EMPTYPROTO) \ + -DMD5ENABLE=\"$(MD5PWD)\" -DMAILSPOOL=\"$(MAILSPOOL)\" \ + -DANONYMOUSHOME=\"$(MAILSPOOL)/anonymous\" \ + -DACTIVEFILE=\"$(ACTIVEFILE)\" -DNEWSSPOOL=\"$(NEWSSPOOL)\" \ + -DLOCKPGM=\"$(LOCKPGM)\" \ + -DLOCKPGM1=\"$(LOCKPGM1)\" -DLOCKPGM2=\"$(LOCKPGM2)\" \ + -DLOCKPGM3=\"$(LOCKPGM3)\" > OSCFLAGS +- echo $(BASELDFLAGS) $(EXTRALDFLAGS) > LDFLAGS ++ echo $(EXTRALIBS) `$(CAT) LDFLAGS` > LIBS ++ echo $(EXTRALDFLAGS) `$(CAT) LDFLAGS` -lcrypt $(BASELDFLAGS) > LDFLAGS + echo "$(ARRC) $(ARCHIVE) $(BINARIES) $(LIBRARIES);$(RANLIB) $(ARCHIVE)" > ARCHIVE +- echo "`$(CAT) CCTYPE` `$(CAT) CFLAGS` `$(CAT) OSFLAGS` -shared \ +- -Wl,-soname,libc-client.so.1 -o libc-client.so.1.0.0 $(BINARIES)" \ ++ echo "`$(CAT) CCTYPE` `$(CAT) CFLAGS` $(EXTRALDFLAGS) `$(CAT) OSFLAGS` -shared \ ++ -Wl,-soname,libc-client.so.1 -o libc-client.so.1.0.0 $(BINARIES)" `$(CAT) LIBS` $(BASELDFLAGS) \ + >> ARCHIVE + echo $(ARCHIVE) > ARCHIVENAME + echo $(OS) > OSTYPE |