dev-libs/gmp: add USE=pic for static libraries, bug #707332

gmp makes a decision to use PIC or non-PIC assemply at
./configure time instead of (typical) build time.

On top of that non-PIC assembly also has TEXTRELs in it
which musl can't handle and crashes binaries at relocation
setup time. For gmp is it relevant only for static linking.

The change adds USE=pic to force static libraries to generate
assembly code without TEXTRELs.

Reported-by: Andrew Aladjev
Closes: https://bugs.gentoo.org/707332
Package-Manager: Portage-2.3.86, Repoman-2.3.20
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
This commit is contained in:
Sergei Trofimovich
2020-01-31 07:56:56 +00:00
parent 3ec0632241
commit 10a57644d5
5 changed files with 19 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
# Copyright 1999-2019 Gentoo Authors
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=6
@@ -19,7 +19,7 @@ LICENSE="|| ( LGPL-3+ GPL-2+ )"
# The subslot reflects the C & C++ SONAMEs.
SLOT="0/10.4"
KEYWORDS="~alpha amd64 arm arm64 hppa ia64 ~m68k ~mips ppc ppc64 ~riscv s390 ~sh sparc x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="+asm doc cxx static-libs"
IUSE="+asm doc cxx pic static-libs"
DEPEND="sys-devel/m4
app-arch/xz-utils"
@@ -77,12 +77,15 @@ multilib_src_configure() {
filter-flags -O?
fi
# --with-pic forces static libraries to be built as PIC
# and without TEXTRELs. musl does not support TEXTRELs: bug #707332
tc-export CC
ECONF_SOURCE="${S}" econf \
--localstatedir="${EPREFIX}"/var/state/gmp \
--enable-shared \
$(use_enable asm assembly) \
$(use_enable cxx) \
$(use pic && echo --with-pic) \
$(use_enable static-libs static)
}

View File

@@ -1,4 +1,4 @@
# Copyright 1999-2019 Gentoo Authors
# Copyright 1999-2020 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI="5"
@@ -19,7 +19,7 @@ LICENSE="|| ( LGPL-3+ GPL-2+ )"
# The subslot reflects the C & C++ SONAMEs.
SLOT="0/10.4"
KEYWORDS="~alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="+asm doc cxx static-libs"
IUSE="+asm doc cxx pic static-libs"
DEPEND="sys-devel/m4
app-arch/xz-utils"
@@ -76,12 +76,15 @@ multilib_src_configure() {
filter-flags -O?
fi
# --with-pic forces static libraries to be built as PIC
# and without TEXTRELs. musl does not support TEXTRELs: bug #707332
tc-export CC
ECONF_SOURCE="${S}" econf \
--localstatedir="${EPREFIX}"/var/state/gmp \
--enable-shared \
$(use_enable asm assembly) \
$(use_enable cxx) \
$(use pic && echo --with-pic) \
$(use_enable static-libs static)
}

View File

@@ -19,7 +19,7 @@ LICENSE="|| ( LGPL-3+ GPL-2+ )"
# The subslot reflects the C & C++ SONAMEs.
SLOT="0/10.4"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sh ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="+asm doc cxx static-libs"
IUSE="+asm doc cxx pic static-libs"
DEPEND="sys-devel/m4
app-arch/xz-utils"
@@ -77,12 +77,15 @@ multilib_src_configure() {
filter-flags -O?
fi
# --with-pic forces static libraries to be built as PIC
# and without TEXTRELs. musl does not support TEXTRELs: bug #707332
tc-export CC
ECONF_SOURCE="${S}" econf \
--localstatedir="${EPREFIX}"/var/state/gmp \
--enable-shared \
$(use_enable asm assembly) \
$(use_enable cxx) \
$(use pic && echo --with-pic) \
$(use_enable static-libs static)
}

View File

@@ -19,7 +19,7 @@ LICENSE="|| ( LGPL-3+ GPL-2+ )"
# The subslot reflects the C & C++ SONAMEs.
SLOT="0/10.4"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sh ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
IUSE="+asm doc cxx static-libs"
IUSE="+asm doc cxx pic static-libs"
DEPEND="sys-devel/m4
app-arch/xz-utils"
@@ -77,12 +77,15 @@ multilib_src_configure() {
filter-flags -O?
fi
# --with-pic forces static libraries to be built as PIC
# and without TEXTRELs. musl does not support TEXTRELs: bug #707332
tc-export CC
ECONF_SOURCE="${S}" econf \
--localstatedir="${EPREFIX}"/var/state/gmp \
--enable-shared \
$(use_enable asm assembly) \
$(use_enable cxx) \
$(use pic && echo --with-pic) \
$(use_enable static-libs static)
}

View File

@@ -7,6 +7,7 @@
</maintainer>
<use>
<flag name="asm">Enable use of hand optimized assembly routines (faster execution)</flag>
<flag name="pic">Force static libraries to be built as PIC to avoid TEXTRELs.</flag>
</use>
<upstream>
<remote-id type="cpe">cpe:/a:gmplib:gmp</remote-id>