summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Haubenwallner <haubi@gentoo.org>2013-11-08 14:19:30 +0000
committerMichael Haubenwallner <haubi@gentoo.org>2013-11-08 14:19:30 +0000
commitbd654664799c03c081002fb13cef033cf7ae7dea (patch)
treeb6934e09bbe6e860c3a7db943469d0b70588a31b /sys-devel/native-cctools
parentFix systems where the stack grows up (bug #490746). (diff)
downloadgentoo-2-bd654664799c03c081002fb13cef033cf7ae7dea.tar.gz
gentoo-2-bd654664799c03c081002fb13cef033cf7ae7dea.tar.bz2
gentoo-2-bd654664799c03c081002fb13cef033cf7ae7dea.zip
+native-cctools-4: Wrapp AIX nm for long TMPDIR. Group AIX wrappers in one subdir.
(Portage version: 2.2.7/cvs/Linux x86_64, signed Manifest commit with key A630CCB8)
Diffstat (limited to 'sys-devel/native-cctools')
-rw-r--r--sys-devel/native-cctools/ChangeLog9
-rw-r--r--sys-devel/native-cctools/files/aix-2/ld139
-rw-r--r--sys-devel/native-cctools/files/aix-2/mkexpfile70
-rw-r--r--sys-devel/native-cctools/files/aix-2/nm6
-rw-r--r--sys-devel/native-cctools/files/aix-mkexpfile-156
-rw-r--r--sys-devel/native-cctools/native-cctools-4.ebuild (renamed from sys-devel/native-cctools/native-cctools-3.ebuild)11
6 files changed, 229 insertions, 62 deletions
diff --git a/sys-devel/native-cctools/ChangeLog b/sys-devel/native-cctools/ChangeLog
index f9b8af5cfdeb..2f7d17ea8769 100644
--- a/sys-devel/native-cctools/ChangeLog
+++ b/sys-devel/native-cctools/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for sys-devel/native-cctools
# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/ChangeLog,v 1.4 2013/11/05 15:03:13 haubi Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/ChangeLog,v 1.5 2013/11/08 14:19:30 haubi Exp $
+
+*native-cctools-4 (08 Nov 2013)
+
+ 08 Nov 2013; Michael Haubenwallner <haubi@gentoo.org> -files/aix-mkexpfile-1,
+ +files/aix-2/ld, +files/aix-2/mkexpfile, +files/aix-2/nm,
+ -native-cctools-3.ebuild, +native-cctools-4.ebuild:
+ Wrapp AIX nm for long TMPDIR. Group AIX wrappers in one subdir.
*native-cctools-3 (05 Nov 2013)
diff --git a/sys-devel/native-cctools/files/aix-2/ld b/sys-devel/native-cctools/files/aix-2/ld
new file mode 100644
index 000000000000..f71edea7f590
--- /dev/null
+++ b/sys-devel/native-cctools/files/aix-2/ld
@@ -0,0 +1,139 @@
+#! /usr/bin/env /bin/ksh
+# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/files/aix-2/ld,v 1.1 2013/11/08 14:19:30 haubi Exp $
+
+# Upon '-soname' and similar flags, create a "shared library" on AIX being an
+# archive file containing an Import File and the shared object file, as in:
+# http://lists.gnu.org/archive/html/libtool/2011-01/msg00023.html
+# with updates in:
+# http://lists.gnu.org/archive/html/libtool/2011-02/msg00000.html
+#
+# This helper script is meant not depend on anything Gentoo specific.
+
+ld=/usr/ccs/bin/ld
+ar=/usr/ccs/bin/ar
+strip=/usr/ccs/bin/strip
+dump=/usr/sbin/dump
+awk=/usr/bin/awk
+rm=/usr/bin/rm
+mkdir=/usr/bin/mkdir
+mv=/usr/bin/mv
+ln=/usr/bin/ln
+
+oldargs=
+output=
+soname=
+newargs=
+OBJECT_MODE=${OBJECT_MODE:-32}
+
+while [[ $# -gt 0 ]]
+do
+ arg=$1
+ shift
+ oldargs="${oldargs} '${arg}'"
+ case ${arg} in
+ -o)
+ newargs="${newargs} -o '$1'"
+ output=$1
+ oldargs="${oldargs} '$1'"
+ shift
+ ;;
+ -bM:SRE)
+ newargs="${newargs} '-G' '-bernotok'"
+ ;;
+ -soname=*)
+ soname=${arg#-soname=}
+ ;;
+ -h*)
+ soname=${arg#-h}
+ ;;
+ -soname|-h)
+ soname=$1
+ shift
+ ;;
+ -b32)
+ newargs="${newargs} '${arg}'"
+ OBJECT_MODE=32
+ ;;
+ -b64)
+ newargs="${newargs} '${arg}'"
+ OBJECT_MODE=64
+ ;;
+ *)
+ newargs="${newargs} '${arg}'"
+ ;;
+ esac
+done
+
+if [[ -z ${output} || -z ${soname} ]]; then
+ eval "exec ${ld} ${oldargs}"
+ exit 1
+fi
+
+# Running ld against the orginal target file to retain
+# ld error message when there's a problem with it:
+eval "${ld} -o '${output}' ${newargs}" || exit 1
+
+workdir="${output}.$$"
+
+${rm} -rf "${workdir}" || exit 1
+trap "${rm} -rf '${workdir}'" 0
+
+case ${soname} in
+*\(*\))
+ shro=${soname#*\(}
+ shro=${shro%\)}
+ shri=${shro%.*}.imp
+ ;;
+*\[*\])
+ shro=${soname#*\[}
+ shro=${shro%\]}
+ shri=${shro%.*}.imp
+ ;;
+none) # loadable only module, not linkable: no import file
+ shro='shr.o'
+ soname="${output##*/}(${shro})"
+ shri=
+ ;;
+auto)
+ shro='shr.o'
+ soname=${output##*/}
+ if [[ ${soname} == lib*.so* ]]; then
+ # linkable library: need import file
+ shri=${shro%.*}.imp
+ else
+ # loadable only module, not linkable: no import file
+ shri=
+ fi
+ soname="${soname}(${shro})"
+ ;;
+*)
+ shro='shr.o'
+ shri=${shro%.*}.imp
+ soname="${soname}(${shro})"
+ ;;
+esac
+
+export OBJECT_MODE
+
+${mkdir} "${workdir}" || exit 1
+${strip} -e "${output}" || exit 1
+if [[ -n ${shri} ]]; then
+ ${dump} -Tv "${output}" > "${workdir}"/syms || exit 1
+ ${awk} '
+ BEGIN {
+ print "#! '"${soname}"'"
+ print "# '"${OBJECT_MODE}"'"
+ }
+ {
+ if ($4 == "EXP" || $4 == "ImpExp") {
+ print $8
+ } else
+ if ($4 == "wEXP") {
+ print $8" weak"
+ }
+ }' <"${workdir}"/syms > "${workdir}"/${shri} || exit 1
+fi
+${mv} "${output}" "${workdir}/${shro}" || exit 1
+${ar} rc "${output}" ${shri:+"${workdir}/${shri}"} "${workdir}/${shro}" || exit 1
+exit 0
diff --git a/sys-devel/native-cctools/files/aix-2/mkexpfile b/sys-devel/native-cctools/files/aix-2/mkexpfile
new file mode 100644
index 000000000000..4e79e4647b06
--- /dev/null
+++ b/sys-devel/native-cctools/files/aix-2/mkexpfile
@@ -0,0 +1,70 @@
+#! /bin/sh
+
+nm="${0%mkexpfile}nm"
+showwith=
+expfile="ld.aix.exports.$$"
+srcobjs=
+
+# /bin/sort does not allow TMPDIR to be longer than 85 characters
+test ${#TMPDIR} -le 85 || TMPDIR=/tmp export TMPDIR
+
+while test $# -gt 0
+do
+ arg=$1
+ shift
+
+ case ${arg} in
+ --) for arg in "$@"
+ do
+ srcobjs="${srcobjs} '${arg}'"
+ done
+ break
+ ;;
+ --show-with=*) showwith="${arg#--show-with=}" ;;
+ -o) expfile="${1}"; shift ;;
+ -o*) expfile="${arg#-o}"; ;;
+ *) srcobjs="${srcobjs} '${arg}'" ;;
+ esac
+done
+
+/bin/rm -f "${expfile}" || exit 1
+
+if ! type "${nm}" >/dev/null 2>&1
+then
+ case ${nm} in
+ *-nm) nm=${nm##*/} ;; # use "powerpc-ibm-aix7.1.0.0-nm" from PATH
+ */nm|nm) nm=/usr/ccs/bin/nm ;; # native anyway
+ esac
+ type "${nm}" >/dev/null || exit 1 # let 'type' yell when necessary
+fi
+
+if "${nm}" -V 2>&1 | /bin/grep 'GNU' >/dev/null
+then
+ eval "${nm}" -Bpg ${srcobjs} |
+ /bin/awk '{
+ if ((($2 == "T") || ($2 == "D") || ($2 == "B") || ($2 == "W")) && (substr($3,1,1) != ".")) {
+ if ($2 == "W") {
+ print $3 " weak"
+ } else {
+ print $3
+ }
+ }
+ }' |
+ /bin/sort -u > "${expfile}" || exit 1
+else
+ eval "${nm}" -PCpgl ${srcobjs} |
+ /bin/awk '{
+ if ((($2 == "T") || ($2 == "D") || ($2 == "B") || ($2 == "W") || ($2 == "V") || ($2 == "Z")) && (substr($1,1,1) != ".")) {
+ if (($2 == "W") || ($2 == "V") || ($2 == "Z")) {
+ print $1 " weak"
+ } else {
+ print $1
+ }
+ }
+ }' |
+ /bin/sort -u > "${expfile}" || exit 1
+fi
+
+echo "${showwith}${expfile}"
+
+exit 0
diff --git a/sys-devel/native-cctools/files/aix-2/nm b/sys-devel/native-cctools/files/aix-2/nm
new file mode 100644
index 000000000000..5ba1d650d23a
--- /dev/null
+++ b/sys-devel/native-cctools/files/aix-2/nm
@@ -0,0 +1,6 @@
+#! /bin/sh
+
+# /usr/bin/sort (used by nm) cannot work with TMPDIR longer than 85 characters.
+test ${#TMPDIR} -le 85 || TMPDIR=/tmp export TMPDIR
+
+exec /usr/ccs/bin/nm ${1+"$@"}
diff --git a/sys-devel/native-cctools/files/aix-mkexpfile-1 b/sys-devel/native-cctools/files/aix-mkexpfile-1
deleted file mode 100644
index 7b36f3bc1f7a..000000000000
--- a/sys-devel/native-cctools/files/aix-mkexpfile-1
+++ /dev/null
@@ -1,56 +0,0 @@
-#! /usr/bin/env bash
-# Copyright 2013-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/files/aix-mkexpfile-1,v 1.1 2013/11/05 15:03:13 haubi Exp $
-
-# Creating shared libraries on AIX involves lots of commands. While there is
-# the ld-wrapper supporting the '-soname' flag already, it also is necessary
-# to create the list of exported symbols from all the local object files only,
-# because with the -bexpfull linker flag we would export symbols from static
-# objects found in libc.a too, which should be privately linked into
-# subsequent shared libs instead of importing them from current sharedlib.
-
-# Also, -bexpfull may trigger this AIX 7.1 kernel bug:
-# https://www-304.ibm.com/support/docview.wss?uid=isg1IV39558
-
-# Example to use this helper script, in combination with ld-wrapper:
-# gcc -shared -soname=lib.so.1 -o lib.so *.o -Wl,-bexport:`mkexpfile *.o`
-
-nm=${0%mkexpfile}nm
-showwith=
-expfile="ld.aix.exports.$$"
-srcobjs=()
-
-while [[ $# -gt 0 ]]
-do
- arg=$1
- shift
-
- case ${arg} in
- --) srcobjs=( "${srcobjs[@]}" "$@" ); break ;;
- --show-with=*) showwith=${arg#--show-with=} ;;
- -o) expfile=$1; shift ;;
- -o*) expfile=${arg#-o}; ;;
- *) srcobjs=( "${srcobjs[@]}" "${arg}" ) ;;
- esac
-done
-
-rm -f "${expfile}" || exit 1
-
-type ${nm} >/dev/null 2>&1 || nm=nm
-
-${nm} -PCpgl "${srcobjs[@]}" |
- awk '{
- if ((($2 == "T") || ($2 == "D") || ($2 == "B") || ($2 == "W") || ($2 == "V") || ($2 == "Z")) && (substr($1,1,1) != ".")) {
- if (($2 == "W") || ($2 == "V") || ($2 == "Z")) {
- print $1 " weak"
- } else {
- print $1
- }
- }
- }' |
- sort -u > "${expfile}" || exit 1
-
-printf "%s\n" "${showwith}${expfile}"
-
-exit 0
diff --git a/sys-devel/native-cctools/native-cctools-3.ebuild b/sys-devel/native-cctools/native-cctools-4.ebuild
index 0cb79b0c8e91..b950955536b8 100644
--- a/sys-devel/native-cctools/native-cctools-3.ebuild
+++ b/sys-devel/native-cctools/native-cctools-4.ebuild
@@ -1,6 +1,6 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/native-cctools-3.ebuild,v 1.1 2013/11/05 15:03:13 haubi Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/native-cctools/native-cctools-4.ebuild,v 1.1 2013/11/08 14:19:30 haubi Exp $
EAPI="3"
@@ -13,8 +13,7 @@ SRC_URI=""
LICENSE="GPL-2" # actually, we don't know, the wrapper is
SLOT="0"
-AIX_LD_V=2
-AIX_MKEXPFILE_V=1
+AIX_V='aix-2'
KEYWORDS="~ppc-aix ~x86-interix ~ppc-macos ~x64-macos ~x86-macos ~x64-solaris ~x86-solaris"
@@ -39,8 +38,9 @@ src_install() {
;;
*-aix*)
nativepath=/usr/ccs/bin
- wrappers=("${wrappers[@]}" "ld=${FILESDIR}/ld-aix-${AIX_LD_V}")
- wrappers=("${wrappers[@]}" "mkexpfile=${FILESDIR}/aix-mkexpfile-${AIX_MKEXPFILE_V}")
+ wrappers=("${wrappers[@]}" "ld=${FILESDIR}/${AIX_V}/ld")
+ wrappers=("${wrappers[@]}" "nm=${FILESDIR}/${AIX_V}/nm")
+ wrappers=("${wrappers[@]}" "mkexpfile=${FILESDIR}/${AIX_V}/mkexpfile")
;;
*-apple-darwin*|*-netbsd*|*-openbsd*)
nativepath=/usr/bin
@@ -92,6 +92,7 @@ src_install() {
for wrapper in "${wrappers[@]}" ; do
source=${wrapper#*=}
target=${wrapper%%=*}
+ rm -f "${target}"
newexe "${source}" "${target}" || die
done
# Generate an env.d entry for this binutils