/[gentoo-x86]/eclass/multilib.eclass
Gentoo

Diff of /eclass/multilib.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.34 Revision 1.49
1# Copyright 1999-2004 Gentoo Foundation 1# Copyright 1999-2004 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/multilib.eclass,v 1.34 2005/10/06 10:03:53 eradicator Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/multilib.eclass,v 1.49 2006/05/28 19:31:33 blubb Exp $
4# 4#
5# Author: Jeremy Huddleston <eradicator@gentoo.org> 5# Author: Jeremy Huddleston <eradicator@gentoo.org>
6# 6#
7# This eclass is for all functions pertaining to handling multilib. 7# This eclass is for all functions pertaining to handling multilib.
8# configurations. 8# configurations.
9
10 9
11DESCRIPTION="Based on the ${ECLASS} eclass" 10DESCRIPTION="Based on the ${ECLASS} eclass"
12 11
13# has_multilib_profile: 12# has_multilib_profile:
14# Return true if the current profile is a multilib profile and lists more than 13# Return true if the current profile is a multilib profile and lists more than
95### END DOCUMENTATION ### 94### END DOCUMENTATION ###
96 95
97# Defaults: 96# Defaults:
98export MULTILIB_ABIS=${MULTILIB_ABIS:-"default"} 97export MULTILIB_ABIS=${MULTILIB_ABIS:-"default"}
99export DEFAULT_ABI=${DEFAULT_ABI:-"default"} 98export DEFAULT_ABI=${DEFAULT_ABI:-"default"}
100# This causes econf to set --libdir=/usr/lib where it didn't before
101#export ABI=${ABI:-"default"}
102export CFLAGS_default 99export CFLAGS_default
103export LDFLAGS_default 100export LDFLAGS_default
104export CHOST_default=${CHOST_default:-${CHOST}} 101export CHOST_default=${CHOST_default:-${CHOST}}
102export CTARGET_default=${CTARGET_default:-${CTARGET:-${CHOST_default}}}
105export LIBDIR_default=${CONF_LIBDIR:-"lib"} 103export LIBDIR_default=${CONF_LIBDIR:-"lib"}
106export CDEFINE_default="__unix__" 104export CDEFINE_default="__unix__"
105export KERNEL_ABI=${KERNEL_ABI:-${DEFAULT_ABI}}
107 106
108# has_multilib_profile() 107# has_multilib_profile()
109has_multilib_profile() { 108has_multilib_profile() {
110 [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] 109 [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
111} 110}
194} 193}
195 194
196get_abi_CFLAGS() { get_abi_var CFLAGS "$@"; } 195get_abi_CFLAGS() { get_abi_var CFLAGS "$@"; }
197get_abi_LDFLAGS() { get_abi_var LDFLAGS "$@"; } 196get_abi_LDFLAGS() { get_abi_var LDFLAGS "$@"; }
198get_abi_CHOST() { get_abi_var CHOST "$@"; } 197get_abi_CHOST() { get_abi_var CHOST "$@"; }
198get_abi_CTARGET() { get_abi_var CTARGET "$@"; }
199get_abi_FAKE_TARGETS() { get_abi_var FAKE_TARGETS "$@"; } 199get_abi_FAKE_TARGETS() { get_abi_var FAKE_TARGETS "$@"; }
200get_abi_CDEFINE() { get_abi_var CDEFINE "$@"; } 200get_abi_CDEFINE() { get_abi_var CDEFINE "$@"; }
201get_abi_LIBDIR() { get_abi_var LIBDIR "$@"; } 201get_abi_LIBDIR() { get_abi_var LIBDIR "$@"; }
202 202
203# Return a list of the ABIs we want to install for with 203# Return a list of the ABIs we want to install for with
243# Return a list of the ABIs supported by this profile. 243# Return a list of the ABIs supported by this profile.
244# the last one in the list being the default. 244# the last one in the list being the default.
245get_all_abis() { 245get_all_abis() {
246 local order="" 246 local order=""
247 247
248 if [ -z "${MULTILIB_ABIS}" ]; then 248 if [[ -z ${MULTILIB_ABIS} ]] ; then
249 echo "default" 249 echo "default"
250 return 0 250 return 0
251 fi 251 fi
252 252
253 for x in ${MULTILIB_ABIS}; do 253 for x in ${MULTILIB_ABIS}; do
254 if [ "${x}" != "${DEFAULT_ABI}" ]; then 254 if [[ ${x} != ${DEFAULT_ABI} ]] ; then
255 order="${order:+${order }}${x}" 255 order="${order:+${order} }${x}"
256 fi 256 fi
257 done 257 done
258 order="${order:+${order} }${DEFAULT_ABI}" 258 order="${order:+${order} }${DEFAULT_ABI}"
259 259
260 echo ${order} 260 echo ${order}
267get_all_libdirs() { 267get_all_libdirs() {
268 local libdirs="lib" 268 local libdirs="lib"
269 local abi 269 local abi
270 local dir 270 local dir
271 271
272 if has_multilib_profile; then 272 # Remove when amd64's 2004.3 is purged.
273 if [[ -n "${CONF_LIBDIR}" ]]; then
274 for dir in ${CONF_LIBDIR} ${CONF_MULTILIBDIR:-lib32}; do
275 [ "${dir}" != "lib" ] && libdirs="${libdirs} ${dir}"
276 done
277 else
273 for abi in ${MULTILIB_ABIS}; do 278 for abi in ${MULTILIB_ABIS}; do
274 [ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})" 279 [ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})"
275 done
276 elif [ -n "${CONF_LIBDIR}" ]; then
277 for dir in ${CONF_LIBDIR} ${CONF_MULTILIBDIR:-lib32}; do
278 [ "${dir}" != "lib" ] && libdirs="${libdirs} ${dir}"
279 done 280 done
280 fi 281 fi
281 282
282 echo "${libdirs}" 283 echo "${libdirs}"
283} 284}
389# Ideas for this code came from debian's sparc-linux headers package. 390# Ideas for this code came from debian's sparc-linux headers package.
390# 391#
391# Example: 392# Example:
392# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64 393# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64
393# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64 394# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64
395#
396# Warning: Be careful with the ordering here. The default ABI has to be the
397# last, because it is always defined (by GCC)
394create_ml_includes() { 398create_ml_includes() {
395 local dest=$1 399 local dest=$1
396 shift 400 shift
397 local basedirs=$(create_ml_includes-listdirs "$@") 401 local basedirs=$(create_ml_includes-listdirs "$@")
398 402
532 # exit because we'll likely be called from a subshell 536 # exit because we'll likely be called from a subshell
533 exit 1 537 exit 1
534} 538}
535 539
536get_libname() { 540get_libname() {
541 local libname
537 local ver=$1 542 local ver=$1
538 if use userland_Darwin ; then 543 case ${CHOST} in
544 *-darwin*) libname="dylib";;
545 *) libname="so";;
546 esac
547
539 if [ -z ${ver} ] ; then 548 if [[ -z $@ ]] ; then
540 echo ".dylib" 549 echo ".${libname}"
541 else
542 echo ".${ver}.dylib"
543 fi
544 else 550 else
545 if [ -z ${ver} ] ; then 551 for ver in "$@" ; do
546 echo ".so" 552 case ${CHOST} in
547 else 553 *-darwin*) echo ".${ver}.${libname}";;
548 echo ".so.${ver}" 554 *) echo ".${libname}.${ver}";;
549 fi 555 esac
556 done
550 fi 557 fi
551} 558}
552 559
553# This is for the toolchain to setup profile variables when pulling in 560# This is for the toolchain to setup profile variables when pulling in
554# a crosscompiler (and thus they aren't set in the profile) 561# a crosscompiler (and thus they aren't set in the profile)
555multilib_env() { 562multilib_env() {
556 local CTARGET=$1
557 local CTARGET_post=${CTARGET#*-} 563 local CTARGET=${1:-${CTARGET}}
558 564
559 case $(tc-arch ${CTARGET}) in 565 case ${CTARGET} in
560 amd64) 566 x86_64*)
561 export CFLAGS_x86=${CFLAGS_x86--m32} 567 export CFLAGS_x86=${CFLAGS_x86--m32}
562 export CHOST_x86=i686-${CTARGET_post} 568 export CHOST_x86=${CTARGET/x86_64/i686}
563 export CTARGET_x86=i686-${CTARGET_post} 569 export CTARGET_x86=${CHOST_x86}
564 export CDEFINE_x86="__i386__" 570 export CDEFINE_x86="__i386__"
565 export LIBDIR_x86="lib" 571 export LIBDIR_x86="lib"
566 572
567 export CFLAGS_amd64=${CFLAGS_amd64--m64} 573 export CFLAGS_amd64=${CFLAGS_amd64--m64}
568 export CHOST_amd64=x86_64-${CTARGET_post} 574 export CHOST_amd64=${CTARGET}
569 export CTARGET_amd64=x86_64-${CTARGET_post} 575 export CTARGET_amd64=${CTARGET_amd64}
570 export CDEFINE_amd64="__x86_64__" 576 export CDEFINE_amd64="__x86_64__"
571 export LIBDIR_amd64="lib64" 577 export LIBDIR_amd64="lib64"
572 578
573 export MULTILIB_ABIS="amd64 x86" 579 export MULTILIB_ABIS="amd64 x86"
574 export DEFAULT_ABI="amd64" 580 export DEFAULT_ABI="amd64"
575 ;; 581 ;;
576 mips) 582 mips64*)
577 export CFLAGS_o32=${CFLAGS_o32--mabi=32} 583 export CFLAGS_o32=${CFLAGS_o32--mabi=32}
578 export CHOST_o32=mips-${CTARGET_post} 584 export CHOST_o32=${CTARGET/mips64/mips}
579 export CTARGET_o32=mips-${CTARGET_post} 585 export CTARGET_o32=${CHOST_o32}
580 export CDEFINE_o32="_MIPS_SIM == _ABIO32" 586 export CDEFINE_o32="_MIPS_SIM == _ABIO32"
581 export LIBDIR_o32="lib" 587 export LIBDIR_o32="lib"
582 588
583 export CFLAGS_n32=${CFLAGS_n32--mabi=n32} 589 export CFLAGS_n32=${CFLAGS_n32--mabi=n32}
584 export CHOST_n32=mips64-${CTARGET_post} 590 export CHOST_n32=${CTARGET}
585 export CTARGET_n32=mips64-${CTARGET_post} 591 export CTARGET_n32=${CHOST_n32}
586 export CDEFINE_n32="_MIPS_SIM == _ABIN32" 592 export CDEFINE_n32="_MIPS_SIM == _ABIN32"
587 export LIBDIR_n32="lib32" 593 export LIBDIR_n32="lib32"
588 594
589 export CFLAGS_n64=${CFLAGS_n64--mabi=64} 595 export CFLAGS_n64=${CFLAGS_n64--mabi=64}
590 export CHOST_n64=mips64-${CTARGET_post} 596 export CHOST_n64=${CTARGET}
591 export CTARGET_n64=mips64-${CTARGET_post} 597 export CTARGET_n64=${CHOST_n64}
592 export CDEFINE_n64="_MIPS_SIM == _ABI64" 598 export CDEFINE_n64="_MIPS_SIM == _ABI64"
593 export LIBDIR_n64="lib64" 599 export LIBDIR_n64="lib64"
594 600
595 export MULTILIB_ABIS="n64 n32 o32" 601 export MULTILIB_ABIS="n64 n32 o32"
596 export DEFAULT_ABI="n32" 602 export DEFAULT_ABI="n32"
597 ;; 603 ;;
598 ppc64) 604 powerpc64*)
599 export CFLAGS_ppc=${CFLAGS_ppc--m32} 605 export CFLAGS_ppc=${CFLAGS_ppc--m32}
600 export CHOST_ppc=powerpc-${CTARGET_post} 606 export CHOST_ppc=${CTARGET/powerpc64/powerpc}
601 export CTARGET_ppc=powerpc-${CTARGET_post} 607 export CTARGET_ppc=${CHOST_ppc}
602 export CDEFINE_ppc="!__powerpc64__" 608 export CDEFINE_ppc="!__powerpc64__"
603 export LIBDIR_ppc="lib" 609 export LIBDIR_ppc="lib"
604 610
605 export CFLAGS_ppc64=${CFLAGS_ppc64--m64} 611 export CFLAGS_ppc64=${CFLAGS_ppc64--m64}
606 export CHOST_ppc64=powerpc64-${CTARGET_post} 612 export CHOST_ppc64=${CTARGET}
607 export CTARGET_ppc64=powerpc64-${CTARGET_post} 613 export CTARGET_ppc64=${CHOST_ppc64}
608 export CDEFINE_ppc64="__powerpc64__" 614 export CDEFINE_ppc64="__powerpc64__"
609 export LIBDIR_ppc64="lib64" 615 export LIBDIR_ppc64="lib64"
610 616
611 export MULTILIB_ABIS="ppc64 ppc" 617 export MULTILIB_ABIS="ppc64 ppc"
612 export DEFAULT_ABI="ppc64" 618 export DEFAULT_ABI="ppc64"
613 ;; 619 ;;
620 s390x*)
621 export CFLAGS_s390=${CFLAGS_s390--m31} # the 31 is not a typo
622 export CHOST_s390=${CTARGET/s390x/s390}
623 export CTARGET_s390=${CHOST_s390}
624 export CDEFINE_s390="!__s390x__"
625 export LIBDIR_s390="lib"
626
627 export CFLAGS_s390x=${CFLAGS_s390x--m64}
628 export CHOST_s390x=${CTARGET}
629 export CTARGET_s390x=${CHOST_s390x}
630 export CDEFINE_s390x="__s390x__"
631 export LIBDIR_s390x="lib64"
632
633 export MULTILIB_ABIS="s390x s390"
634 export DEFAULT_ABI="s390x"
635 ;;
614 sparc) 636 sparc64*)
615 export CFLAGS_sparc32=${CFLAGS_sparc32--m32} 637 export CFLAGS_sparc32=${CFLAGS_sparc32--m32}
616 export CHOST_sparc32=sparc-${CTARGET_post} 638 export CHOST_sparc32=${CTARGET/sparc64/sparc}
617 export CTARGET_sparc32=sparc-${CTARGET_post} 639 export CTARGET_sparc32=${CHOST_sparc32}
618 export CDEFINE_sparc32="!__arch64__" 640 export CDEFINE_sparc32="!__arch64__"
619 export LIBDIR_sparc32="lib" 641 export LIBDIR_sparc32="lib"
620 642
621 export CFLAGS_sparc64=${CFLAGS_sparc64--m64} 643 export CFLAGS_sparc64=${CFLAGS_sparc64--m64}
622 export CHOST_sparc64=sparc64-${CTARGET_post} 644 export CHOST_sparc64=${CTARGET}
623 export CTARGET_sparc64=sparc64-${CTARGET_post} 645 export CTARGET_sparc64=${CHOST_sparc64}
624 export CDEFINE_sparc64="__arch64__" 646 export CDEFINE_sparc64="__arch64__"
625 export LIBDIR_sparc64="lib64" 647 export LIBDIR_sparc64="lib64"
626 648
627 export MULTILIB_ABIS="sparc64 sparc32" 649 export MULTILIB_ABIS="sparc64 sparc32"
628 export DEFAULT_ABI="sparc64" 650 export DEFAULT_ABI="sparc64"
629 ;; 651 ;;
630 *) 652 *)
631 export MULTILIB_ABIS="default" 653 export MULTILIB_ABIS="default"
632 export DEFAULT_ABI="default" 654 export DEFAULT_ABI="default"
655 ;;
633 esac 656 esac
634} 657}

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.49

  ViewVC Help
Powered by ViewVC 1.1.20