dev-libs/openssl: fix race condition in install phase
authorThomas Deutschmann <whissi@gentoo.org>
Mon, 3 Sep 2018 14:37:33 +0000 (16:37 +0200)
committerThomas Deutschmann <whissi@gentoo.org>
Mon, 3 Sep 2018 14:39:51 +0000 (16:39 +0200)
Closes: https://bugs.gentoo.org/665130
Package-Manager: Portage-2.3.48, Repoman-2.3.10

dev-libs/openssl/openssl-1.0.2p.ebuild
dev-libs/openssl/openssl-1.1.1_pre9.ebuild

index 74788708e982b6bdf04305fdac9464edef350fdd..ddc45aa8700b58fe8777c766d78865321260156d 100644 (file)
@@ -106,7 +106,7 @@ src_prepare() {
                -e '/^MAKEDEPPROG/s:=.*:=$(CC):' \
                -e $(has noman FEATURES \
                        && echo '/^install:/s:install_docs::' \
-                       || echo '/^MANDIR=/s:=.*:='${EPREFIX}'/usr/share/man:') \
+                       || echo '/^MANDIR=/s:=.*:='${EPREFIX%/}'/usr/share/man:') \
                Makefile.org \
                || die
        # show the actual commands in the log
@@ -131,7 +131,7 @@ src_prepare() {
        append-flags $(test-flags-CC -Wa,--noexecstack)
        append-cppflags -DOPENSSL_NO_BUF_FREELISTS
 
-       sed -i '1s,^:$,#!'${EPREFIX}'/usr/bin/perl,' Configure #141906
+       sed -i '1s,^:$,#!'${EPREFIX%/}'/usr/bin/perl,' Configure #141906
        # The config script does stupid stuff to prompt the user.  Kill it.
        sed -i '/stty -icanon min 0 time 50; read waste/d' config || die
        ./config --test-sanity || die "I AM NOT SANE"
@@ -203,8 +203,8 @@ multilib_src_configure() {
                $(use_ssl sslv3 ssl3) \
                $(use_ssl tls-heartbeat heartbeats) \
                $(use_ssl zlib) \
-               --prefix="${EPREFIX}"/usr \
-               --openssldir="${EPREFIX}"${SSL_CNF_DIR} \
+               --prefix="${EPREFIX%/}"/usr \
+               --openssldir="${EPREFIX%/}"${SSL_CNF_DIR} \
                --libdir=$(get_libdir) \
                shared threads \
                || die
@@ -239,13 +239,19 @@ multilib_src_test() {
 }
 
 multilib_src_install() {
-       emake INSTALL_PREFIX="${D}" install
+       # We need to create $D/usr on our own to avoid a race condition #665130
+       if [[ ! -d "${D%/}/usr" ]]; then
+               # We can only create this directory once
+               mkdir "${D%/}"/usr || die
+       fi
+
+       emake INSTALL_PREFIX="${D%/}" install
 }
 
 multilib_src_install_all() {
        # openssl installs perl version of c_rehash by default, but
        # we provide a shell version via app-misc/c_rehash
-       rm "${ED}"/usr/bin/c_rehash || die
+       rm "${ED%/}"/usr/bin/c_rehash || die
 
        local -a DOCS=( CHANGES* FAQ NEWS README doc/*.txt doc/c-indentation.el )
        einstalldocs
index e16b92f76ff6c69cc5d81f600d42025156362f9c..e694ab91d16739850879d37b7877502e2e9dddc7 100644 (file)
@@ -58,7 +58,7 @@ src_prepare() {
                -e '/^MAKEDEPPROG/s:=.*:=$(CC):' \
                -e $(has noman FEATURES \
                        && echo '/^install:/s:install_docs::' \
-                       || echo '/^MANDIR=/s:=.*:='${EPREFIX}'/usr/share/man:') \
+                       || echo '/^MANDIR=/s:=.*:='${EPREFIX%/}'/usr/share/man:') \
                -e "/^DOCDIR/s@\$(BASENAME)@&-${PF}@" \
                Configurations/unix-Makefile.tmpl \
                || die
@@ -78,7 +78,7 @@ src_prepare() {
 
        # Prefixify Configure shebang (#141906)
        sed \
-               -e "1s,/usr/bin/env,${EPREFIX}&," \
+               -e "1s,/usr/bin/env,${EPREFIX%/}&," \
                -i Configure || die
        # Remove test target when FEATURES=test isn't set
        if ! use test ; then
@@ -150,8 +150,8 @@ multilib_src_configure() {
                $(use_ssl sctp) \
                $(use_ssl tls-heartbeat heartbeats) \
                $(use_ssl zlib) \
-               --prefix="${EPREFIX}"/usr \
-               --openssldir="${EPREFIX}"${SSL_CNF_DIR} \
+               --prefix="${EPREFIX%/}"/usr \
+               --openssldir="${EPREFIX%/}"${SSL_CNF_DIR} \
                --libdir=$(get_libdir) \
                shared threads \
                || die
@@ -185,7 +185,13 @@ multilib_src_test() {
 }
 
 multilib_src_install() {
-       emake DESTDIR="${D}" install
+       # We need to create $D/usr on our own to avoid a race condition #665130
+       if [[ ! -d "${D%/}/usr" ]]; then
+               # We can only create this directory once
+               mkdir "${D%/}"/usr || die
+       fi
+
+       emake DESTDIR="${D%}" install
 }
 
 multilib_src_install_all() {