| 1 | # Copyright 1999-2011 Gentoo Foundation |
1 | # Copyright 1999-2011 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.112 2012/06/14 03:38:51 vapier Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/toolchain-funcs.eclass,v 1.115 2012/07/26 16:43:59 vapier Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: toolchain-funcs.eclass |
5 | # @ECLASS: toolchain-funcs.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
| 7 | # Toolchain Ninjas <toolchain@gentoo.org> |
7 | # Toolchain Ninjas <toolchain@gentoo.org> |
| 8 | # @BLURB: functions to query common info about the toolchain |
8 | # @BLURB: functions to query common info about the toolchain |
| … | |
… | |
| 610 | local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname) |
610 | local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname) |
| 611 | [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/ |
611 | [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/ |
| 612 | |
612 | |
| 613 | tc-is-static-only && return |
613 | tc-is-static-only && return |
| 614 | |
614 | |
|
|
615 | # Eventually we'd like to get rid of this func completely #417451 |
|
|
616 | case ${CTARGET:-${CHOST}} in |
|
|
617 | *-darwin*) ;; |
|
|
618 | *linux*|*-freebsd*|*-openbsd*|*-netbsd*) |
|
|
619 | use prefix && return 0 ;; |
|
|
620 | *) return 0 ;; |
|
|
621 | esac |
|
|
622 | |
| 615 | # Just make sure it exists |
623 | # Just make sure it exists |
| 616 | dodir /usr/${libdir} |
624 | dodir /usr/${libdir} |
| 617 | |
625 | |
| 618 | if [[ $1 == "-a" ]] ; then |
626 | if [[ $1 == "-a" ]] ; then |
| 619 | auto=true |
627 | auto=true |
| … | |
… | |
| 676 | # understand linker scripts, just create a symlink. |
684 | # understand linker scripts, just create a symlink. |
| 677 | pushd "${ED}/usr/${libdir}" > /dev/null |
685 | pushd "${ED}/usr/${libdir}" > /dev/null |
| 678 | ln -snf "../../${libdir}/${tlib}" "${lib}" |
686 | ln -snf "../../${libdir}/${tlib}" "${lib}" |
| 679 | popd > /dev/null |
687 | popd > /dev/null |
| 680 | ;; |
688 | ;; |
| 681 | *-aix*|*-irix*|*64*-hpux*|*-interix*|*-winnt*) |
|
|
| 682 | if ${auto} ; then |
|
|
| 683 | mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die |
|
|
| 684 | # no way to retrieve soname on these platforms (?) |
|
|
| 685 | tlib=$(readlink "${ED}"/${libdir}/${lib}) |
|
|
| 686 | tlib=${tlib##*/} |
|
|
| 687 | if [[ -z ${tlib} ]] ; then |
|
|
| 688 | # ok, apparently was not a symlink, don't remove it and |
|
|
| 689 | # just link to it |
|
|
| 690 | tlib=${lib} |
|
|
| 691 | else |
|
|
| 692 | rm -f "${ED}"/${libdir}/${lib} |
|
|
| 693 | fi |
|
|
| 694 | else |
|
|
| 695 | tlib=${lib} |
|
|
| 696 | fi |
|
|
| 697 | |
|
|
| 698 | # we don't have GNU binutils on these platforms, so we symlink |
|
|
| 699 | # instead, which seems to work fine. Keep it relative, otherwise |
|
|
| 700 | # we break some QA checks in Portage |
|
|
| 701 | # on interix, the linker scripts would work fine in _most_ |
|
|
| 702 | # situations. if a library links to such a linker script the |
|
|
| 703 | # absolute path to the correct library is inserted into the binary, |
|
|
| 704 | # which is wrong, since anybody linking _without_ libtool will miss |
|
|
| 705 | # some dependencies, since the stupid linker cannot find libraries |
|
|
| 706 | # hardcoded with absolute paths (as opposed to the loader, which |
|
|
| 707 | # seems to be able to do this). |
|
|
| 708 | # this has been seen while building shared-mime-info which needs |
|
|
| 709 | # libxml2, but links without libtool (and does not add libz to the |
|
|
| 710 | # command line by itself). |
|
|
| 711 | pushd "${ED}/usr/${libdir}" > /dev/null |
|
|
| 712 | ln -snf "../../${libdir}/${tlib}" "${lib}" |
|
|
| 713 | popd > /dev/null |
|
|
| 714 | ;; |
|
|
| 715 | hppa*-hpux*) # PA-RISC 32bit (SOM) only, others (ELF) match *64*-hpux* above. |
|
|
| 716 | if ${auto} ; then |
|
|
| 717 | tlib=$(chatr "${ED}"/usr/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}') |
|
|
| 718 | [[ -z ${tlib} ]] && tlib=${lib} |
|
|
| 719 | tlib=${tlib##*/} # 'internal name' can have a path component |
|
|
| 720 | mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die |
|
|
| 721 | # some SONAMEs are funky: they encode a version before the .so |
|
|
| 722 | if [[ ${tlib} != ${lib}* ]] ; then |
|
|
| 723 | mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die |
|
|
| 724 | fi |
|
|
| 725 | [[ ${tlib} != ${lib} ]] && |
|
|
| 726 | rm -f "${ED}"/${libdir}/${lib} |
|
|
| 727 | else |
|
|
| 728 | tlib=$(chatr "${ED}"/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}') |
|
|
| 729 | [[ -z ${tlib} ]] && tlib=${lib} |
|
|
| 730 | tlib=${tlib##*/} # 'internal name' can have a path component |
|
|
| 731 | fi |
|
|
| 732 | pushd "${ED}"/usr/${libdir} >/dev/null |
|
|
| 733 | ln -snf "../../${libdir}/${tlib}" "${lib}" |
|
|
| 734 | # need the internal name in usr/lib too, to be available at runtime |
|
|
| 735 | # when linked with /path/to/lib.sl (hardcode_direct_absolute=yes) |
|
|
| 736 | [[ ${tlib} != ${lib} ]] && |
|
|
| 737 | ln -snf "../../${libdir}/${tlib}" "${tlib}" |
|
|
| 738 | popd >/dev/null |
|
|
| 739 | ;; |
|
|
| 740 | *) |
689 | *) |
| 741 | if ${auto} ; then |
690 | if ${auto} ; then |
| 742 | tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib}) |
691 | tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib}) |
| 743 | [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}" |
692 | [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}" |
| 744 | mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die |
693 | mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die |