summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eclass/toolchain-funcs.eclass186
1 files changed, 7 insertions, 179 deletions
diff --git a/eclass/toolchain-funcs.eclass b/eclass/toolchain-funcs.eclass
index 8b453f68a8ea..ff0a2070c1e0 100644
--- a/eclass/toolchain-funcs.eclass
+++ b/eclass/toolchain-funcs.eclass
@@ -1,6 +1,6 @@
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.89 2009/04/04 17:17:56 grobian Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.90 2009/04/05 07:50:08 grobian Exp $
# @ECLASS: toolchain-funcs.eclass
# @MAINTAINER:
@@ -165,43 +165,6 @@ ninj() { [[ ${type} == "kern" ]] && echo $1 || echo $2 ; }
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}}
case ${host} in
- powerpc-apple-darwin*)
- echo ppc-macos;;
- powerpc64-apple-darwin*)
- echo ppc64-macos;;
- i?86-apple-darwin*)
- echo x86-macos;;
- x86_64-apple-darwin*)
- echo x64-macos;;
- sparc-sun-solaris*)
- echo sparc-solaris;;
- sparcv9-sun-solaris*)
- echo sparc64-solaris;;
- i?86-pc-solaris*)
- echo x86-solaris;;
- x86_64-pc-solaris*)
- echo x64-solaris;;
- powerpc-ibm-aix*)
- echo ppc-aix;;
- mips-sgi-irix*)
- echo mips-irix;;
- ia64-hp-hpux*)
- echo ia64-hpux;;
- i?86-pc-freebsd*)
- echo x86-freebsd;;
- x86_64-pc-freebsd*)
- echo x64-freebsd;;
- i?86-pc-netbsd*)
- echo x86-netbsd;;
- i?86-pc-interix*)
- echo x86-interix;;
- i?86-pc-winnt*)
- echo x86-winnt;;
- i*-pc-freebsd*)
- echo x86-freebsd;;
- x86_64-pc-freebsd*)
- echo x64-freebsd;;
-
alpha*) echo alpha;;
arm*) echo arm;;
avr*) ninj avr32 avr;;
@@ -455,60 +418,11 @@ gen_usr_ldscript() {
[[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )"
for lib in "$@" ; do
-
- # Ensure /lib/${lib} exists to avoid dangling scripts/symlinks.
- # This especially is for AIX where $(get_libname) can return ".a",
- # so /lib/${lib} might be moved to /usr/lib/${lib} (by accident).
- [[ -r "${ED}"/${libdir}/${lib} ]] || continue
-
- case ${CHOST} in
- *-darwin*)
- # Mach-O files have an id, which is like a soname, it tells how
- # another object linking against this lib should reference it.
- # Since we moved the lib from usr/lib into lib this reference is
- # wrong. Hence, we update it here. We don't configure with
- # libdir=/lib because that messes up libtool files.
- # Make sure we don't lose the specific version, so just modify the
- # existing install_name
- install_name=$(otool -DX "${ED}"/${libdir}/${lib})
- [[ -z ${install_name} ]] && die "No install name found for ${ED}/${libdir}/${lib}"
- install_name_tool \
- -id "${EPREFIX}"/${libdir}/${install_name##*/} \
- "${ED}"/${libdir}/${lib}
- # Now as we don't use GNU binutils and our linker doesn't
- # understand linker scripts, just create a symlink.
- pushd "${ED}/usr/${libdir}" > /dev/null
- ln -snf "../../${libdir}/${lib}" "${lib}"
- popd > /dev/null
- ;;
- *-aix*|*-irix*|*-hpux*)
- # we don't have GNU binutils on these platforms, so we symlink
- # instead, which seems to work fine. Keep it relative, otherwise
- # we break some QA checks in Portage
- pushd "${ED}/usr/${libdir}" > /dev/null
- ln -snf "../../${libdir}/${lib}" "${lib}"
- popd > /dev/null
- ;;
- *-interix*|*-winnt*)
- # on interix, the linker scripts would work fine in _most_
- # situations. if a library links to such a linker script the
- # absolute path to the correct library is inserted into the binary,
- # which is wrong, since anybody linking _without_ libtool will miss
- # some dependencies, since the stupid linker cannot find libraries
- # hardcoded with absolute paths (as opposed to the loader, which
- # seems to be able to do this).
- # this has been seen while building shared-mime-info which needs
- # libxml2, but links without libtool (and does not add libz to the
- # command line by itself).
- pushd "${ED}/usr/${libdir}" > /dev/null
- ln -snf "../../${libdir}/${lib}" "${lib}"
- popd > /dev/null
- ;;
- *-mint*)
- # do nothing
- return
- ;;
- *)
+ if [[ ${USERLAND} == "Darwin" ]] ; then
+ ewarn "Not creating fake dynamic library for $lib on Darwin;"
+ ewarn "making a symlink instead."
+ dosym "/${libdir}/${lib}" "/usr/${libdir}/${lib}"
+ else
local tlib
if ${auto} ; then
lib="lib${lib}${suffix}"
@@ -536,93 +450,7 @@ gen_usr_ldscript() {
${output_format}
GROUP ( /${libdir}/${tlib} )
END_LDSCRIPT
- ;;
- esac
- fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"
- done
-}
-
-# This function is for AIX only.
-#
-# Showing a sample IMO is the best description:
-#
-# First, AIX has its own /usr/lib/libiconv.a containing 'shr.o' and 'shr4.o'.
-# Both of them are shared-objects packed into an archive, thus /usr/lib/libiconv.a
-# is a shared library (!), even it is called lib*.a.
-# This is the default layout on aix for shared libraries.
-# Read the ld(1) manpage for more information.
-#
-# But now, we want to install GNU libiconv (sys-libs/libiconv) both as
-# shared and static library.
-# AIX (since 4.3) can create shared libraries if '-brtl' or '-G' linker flags
-# are used.
-#
-# Now assume we have GNU tar installed while GNU libiconv was not.
-# This tar now has a runtime dependency on "libiconv.a(shr4.o)".
-# With our ld-wrapper (from sys-devel/binutils-config) we add EPREFIX/usr/lib
-# as linker path, thus it is recorded as loader path into the binary.
-#
-# When having libiconv.a (the static GNU libiconv) in prefix, the loader finds
-# that one and claims that it does not contain an 'shr4.o' object file:
-#
-# Could not load program tar:
-# Dependent module EPREFIX/usr/lib/libiconv.a(shr4.o) could not be loaded.
-# Member shr4.o is not found in archive
-#
-# According to gcc's "host/target specific installation notes" for *-ibm-aix* [1],
-# we can extract that 'shr4.o' from /usr/lib/libiconv.a, mark it as
-# non-linkable, and include it in our new static library.
-#
-# [1] http://gcc.gnu.org/install/specific.html#x-ibm-aix
-#
-# usage:
-# keep_aix_runtime_object <target-archive inside EPREFIX> <source-archive(objects)>
-# keep_aix_runtime_object "/usr/lib/libiconv.a "/usr/lib/libiconv.a(shr4.o,...)"
-keep_aix_runtime_objects() {
- [[ ${CHOST} == *-*-aix* ]] || return 0
-
- local target=$1
- shift
- local sources="$@"
-
- # strip possible ${ED} prefixes
- target=${target##/}
- target=${target#${D##/}}
- target=${target#${EPREFIX##/}}
- target=${target##/}
-
- if ! $(tc-getAR) -t "${ED}${target}" &>/dev/null; then
- if [[ -e ${ED}${target} ]]; then
- ewarn "${target} is not an archive."
+ fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"
fi
- return 0
- fi
-
- local tmpdir=${TMP}/keep_aix_runtime_object-$$
- mkdir ${tmpdir} || die
-
- local origdir=$(pwd)
- local s
- for s in ${sources}; do
- local sourcelib sourceobjs so
- # format of $s: "/usr/lib/libiconv.a(shr4.o,shr.o)"
- sourcelib=${s%%(*}
- sourceobjs=${s#*(}
- sourceobjs=${sourceobjs%)}
- sourceobjs=${sourceobjs//,/ }
- cd ${tmpdir} || die
- for so in ${sourceobjs}; do
- ebegin "keeping aix runtime object '${sourcelib}(${so})' in '${EPREFIX}/${target}'"
- if ! $(tc-getAR) -x "${sourcelib}" ${so}; then
- eend 1
- continue
- fi
- chmod +w ${so} &&
- $(tc-getSTRIP) -e ${so} &&
- $(tc-getAR) -q "${ED}${target}" ${so} &&
- eend 0 ||
- eend 1
- done
done
- cd "${origdir}"
}