sys-libs/libxcrypt: Revbump to 4.4.10-r1 add multilib and compat USE
authorPatrick McLean <chutzpah@gentoo.org>
Thu, 7 Nov 2019 05:36:37 +0000 (21:36 -0800)
committerPatrick McLean <chutzpah@gentoo.org>
Thu, 7 Nov 2019 05:40:23 +0000 (21:40 -0800)
- multilib support

- a "compat" USE flag that installs a library with binary compatibility
  with glibc

- a "system" USE flag that installs as the system libcrypto.so, this
  collides with the default config of glibc, so it is
  package.use.mask-ed

Package-Manager: Portage-2.3.78, Repoman-2.3.17
Signed-off-by: Patrick McLean <chutzpah@gentoo.org>
sys-libs/libxcrypt/files/libxcrypt-4.4.10-multibuild.patch [new file with mode: 0644]
sys-libs/libxcrypt/libxcrypt-4.4.10-r1.ebuild [new file with mode: 0644]
sys-libs/libxcrypt/libxcrypt-4.4.10.ebuild [deleted file]
sys-libs/libxcrypt/metadata.xml

diff --git a/sys-libs/libxcrypt/files/libxcrypt-4.4.10-multibuild.patch b/sys-libs/libxcrypt/files/libxcrypt-4.4.10-multibuild.patch
new file mode 100644 (file)
index 0000000..aee7d72
--- /dev/null
@@ -0,0 +1,25 @@
+diff --git a/Makefile.am b/Makefile.am
+index 3502a5c..afb8079 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -84,11 +84,7 @@ noinst_HEADERS = \
+       test/des-cases.h \
+       test/crypt-kat.inc
+-if ENABLE_XCRYPT_COMPAT_FILES
+ nodist_include_HEADERS += xcrypt.h
+-else
+-nodist_noinst_HEADERS += xcrypt.h
+-endif
+ noinst_PROGRAMS = \
+       lib/gen-des-tables
+@@ -137,7 +133,7 @@ uninstall_hook_targets = \
+       uninstall-hook-pkgconfig
+ install-data-hook-pkgconfig:
+       cd $(DESTDIR)$(pkgconfigdir) && \
+-              $(LN_S) libxcrypt.pc libcrypt.pc
++              $(LN_S) -f libxcrypt.pc libcrypt.pc
+ uninstall-hook-pkgconfig:
+       -rm -f $(DESTDIR)$(pkgconfigdir)/libcrypt.pc
diff --git a/sys-libs/libxcrypt/libxcrypt-4.4.10-r1.ebuild b/sys-libs/libxcrypt/libxcrypt-4.4.10-r1.ebuild
new file mode 100644 (file)
index 0000000..75fc58e
--- /dev/null
@@ -0,0 +1,150 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+PYTHON_COMPAT=( python3_{6,7} )
+inherit autotools multibuild python-any-r1 multilib-minimal
+
+DESCRIPTION="Extended crypt library for descrypt, md5crypt, bcrypt, and others "
+SRC_URI="https://github.com/besser82/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
+HOMEPAGE="https://github.com/besser82/libxcrypt"
+
+LICENSE="LGPL-2.1+ public-domain BSD BSD-2"
+SLOT="0/1"
+KEYWORDS="~amd64 ~x86"
+IUSE="+compat split-usr static-libs system test"
+
+DEPEND="system? (
+               elibc_glibc? ( sys-libs/glibc[-crypt(+)] )
+               !sys-libs/musl
+       )"
+RDEPEND="${DEPEND}"
+BDEPEND="sys-apps/findutils
+       test? ( ${PYTHON_DEPS} )"
+
+# Gentoo CI complained about not having this
+RESTRICT="!test? ( test )"
+
+PATCHES=(
+       "${FILESDIR}/libxcrypt-4.4.10-pythonver.patch"
+       "${FILESDIR}/libxcrypt-4.4.10-multibuild.patch"
+)
+
+pkg_setup() {
+       MULTIBUILD_VARIANTS=(
+               $(usex compat 'xcrypt_compat' '')
+               xcrypt_nocompat
+       )
+
+       use test && python-any-r1_pkg_setup
+}
+
+src_prepare() {
+       default
+       eautoreconf
+}
+
+src_configure() {
+       multibuild_foreach_variant multilib-minimal_src_configure
+}
+
+get_xclibdir() {
+       printf -- "%s\n" "$(usex split-usr '' '/usr')/$(get_libdir)/$(usex system '' 'xcrypt')"
+}
+
+multilib_src_configure() {
+       local -a myconf=(
+               --libdir=$(get_xclibdir)
+               --with-pkgconfigdir=/usr/$(get_libdir)/pkgconfig
+               --includedir="${EPREFIX}/usr/include/$(usex system '' 'xcrypt')"
+       )
+
+       case "${MULTIBUILD_ID}" in
+               xcrypt_compat-*)
+                       myconf+=(
+                               --disable-static
+                               --disable-xcrypt-compat-files
+                               --enable-obsolete-api=yes
+                       )
+                       ;;
+               xcrypt_nocompat-*)
+                       myconf+=(
+                               --enable-obsolete-api=no
+                               $(use_enable static-libs static)
+                       )
+                       ;;
+               *) die "Unexpected MULTIBUILD_ID: ${MULTIBUILD_ID}";;
+       esac
+
+       ECONF_SOURCE="${S}" econf "${myconf[@]}"
+}
+
+src_compile() {
+       multibuild_foreach_variant multilib-minimal_src_compile
+}
+
+multilib_src_test() {
+       multibuild_foreach_variant run_in_build_dir emake check
+}
+
+src_test() {
+       multibuild_foreach_variant multilib-minimal_src_test
+}
+
+src_install() {
+       multibuild_foreach_variant multilib-minimal_src_install
+
+       (
+               shopt -s failglob || die "failglob failed"
+
+               # make sure out man pages don't collide with glibc or man-pages
+               for manpage in "${ED}"/usr/share/man/man3/crypt{,_r}.?*; do
+                       mv -n "${manpage}" "$(dirname "${manpage}")/xcrypt_$(basename "${manpage}")" \
+                               || die "mv failed"
+               done
+       ) || die "failglob error"
+
+       # remove useless stuff from installation
+       find "${D}"/usr/share/doc/${PF} -type l -delete || die
+       find "${D}" -name '*.la' -delete || die
+}
+
+multilib_install() {
+       local install_target
+
+       case "${MULTIBUILD_ID}" in
+               xcrypt_compat-*) install_target="install-libLTLIBRARIES";;
+               xcrypt_nocompat-*)
+                       if is_final_abi; then
+                               install_target="install"
+                       else
+                               install_target="install-libLTLIBRARIES"
+                       fi
+                       ;;
+               *) die "Unexpected MULTIBUILD_ID: ${MULTIBUILD_ID}";;
+       esac
+
+       emake DESTDIR="${D}" ${install_target}
+
+       # don't install the libcrypt.so symlink for the "compat" version
+       case "${MULTIBUILD_ID}" in
+               xcrypt_compat-*)
+                       rm "${D}"$(get_xclibdir)/libcrypt$(get_libname) \
+                               "${D}"/usr/include/$(usex system '' 'xcrypt/')xcrypt.h || die
+               ;;
+               xcrypt_nocompat-*)
+                       if use split-usr; then
+                               (
+                                       shopt -s failglob || die "failglob failed"
+
+                                       for so_file in "${D}"$(get_xclibdir)/*$(get_libname)*; do
+                                               so_file=$(basename "${so_file}") || die
+
+                                               dosym ../../$(usex system '' '../')$(get_libdir)/$(usex system '' 'xcrypt')/${so_file} \
+                                                       /usr/$(get_libdir)/$(usex system '' 'xcrypt/')${so_file}
+                                       done
+                               ) || die "symlinking library failure"
+                       fi
+                       ;;
+       esac
+}
diff --git a/sys-libs/libxcrypt/libxcrypt-4.4.10.ebuild b/sys-libs/libxcrypt/libxcrypt-4.4.10.ebuild
deleted file mode 100644 (file)
index 93bc10d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright 1999-2019 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-PYTHON_COMPAT=( python3_{6,7} )
-inherit python-any-r1 autotools
-
-DESCRIPTION="Extended crypt library for descrypt, md5crypt, bcrypt, and others "
-SRC_URI="https://github.com/besser82/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz"
-HOMEPAGE="https://github.com/besser82/libxcrypt"
-
-LICENSE="LGPL-2.1+ public-domain BSD BSD-2"
-SLOT="0/2"
-KEYWORDS="~amd64 ~x86"
-IUSE="split-usr test"
-
-BDEPEND="sys-apps/findutils
-       test? ( ${PYTHON_DEPS} )"
-
-# Gentoo CI complained about not having this
-RESTRICT="!test? ( test )"
-
-PATCHES=(
-       "${FILESDIR}/libxcrypt-4.4.10-pythonver.patch"
-)
-
-pkg_setup() {
-       use test && python-any-r1_pkg_setup
-}
-
-src_prepare() {
-       default
-       eautoreconf
-}
-
-src_configure() {
-       econf \
-               --disable-static \
-               --enable-obsolete-api=no \
-               --libdir=$(usex split-usr '/usr' '')/$(get_libdir)/xcrypt \
-               --with-pkgconfigdir=/usr/$(get_libdir)/pkgconfig \
-               --includedir="${EPREFIX}/usr/include/xcrypt"
-}
-
-src_test() {
-       emake check
-}
-
-src_install() {
-       default
-
-       # make sure out man pages don't collide with glibc or man-pages
-       (
-               shopt -s failglob || die "failglob failed"
-               for manpage in "${ED}"/usr/share/man/man*/*.?*; do
-                       mv -n "${manpage}" "$(dirname "${manpage}")/xcrypt_$(basename "${manpage}")" \
-                               || die "mv failed"
-               done
-       ) || die "no man pages to rename"
-}
index 8ce970ea7f31090e5395e1fdd13b070652c03b9d..d84b73d6af1e3c523ee99bad2bef139dedf064fd 100644 (file)
         libcrypt, which comes with the GNU C Library. It supports DES crypt,
         MD5, and passwords with blowfish encryption.
   </longdescription>
+  <use>
+    <flag name="compat">Build with compatibility interfaces for other crypt implementations</flag>
+    <flag name="system">Install as system libcrypt.so rather than to an alternate directory (will collide with sys-libs/glibc's version)</flag>
+  </use>
   <upstream>
     <remote-id type="github">besser82/libxcrypt</remote-id>
   </upstream>