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

Diff of /eclass/multilib.eclass

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

Revision 1.60 Revision 1.70
1# Copyright 1999-2007 Gentoo Foundation 1# Copyright 1999-2008 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.60 2007/03/27 01:46:50 vapier Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/multilib.eclass,v 1.70 2009/01/09 06:59:45 vapier Exp $
4# 4
5# Maintainer: amd64@gentoo.org / toolchain@gentoo.org 5# @ECLASS: multilib.eclass
6# 6# @MAINTAINER:
7# amd64@gentoo.org
8# toolchain@gentoo.org
9# @BLURB: This eclass is for all functions pertaining to handling multilib configurations.
10# @DESCRIPTION:
7# This eclass is for all functions pertaining to handling multilib. 11# This eclass is for all functions pertaining to handling multilib configurations.
8# configurations.
9 12
10___ECLASS_RECUR_MULTILIB="yes" 13___ECLASS_RECUR_MULTILIB="yes"
11[[ -z ${___ECLASS_RECUR_TOOLCHAIN_FUNCS} ]] && inherit toolchain-funcs 14[[ -z ${___ECLASS_RECUR_TOOLCHAIN_FUNCS} ]] && inherit toolchain-funcs
12
13DESCRIPTION="Based on the ${ECLASS} eclass"
14
15# has_multilib_profile:
16# Return true if the current profile is a multilib profile and lists more than
17# one abi in ${MULTILIB_ABIS}. You might want to use this like
18# 'use multilib || has_multilib_profile' until all profiles utilizing the
19# 'multilib' use flag are removed from portage
20
21# is_final_abi:
22# Return true if ${ABI} is the final abi to be installed (and thus we are
23# on our last run through a src_* function.
24
25# number_abis:
26# echo the number of ABIs we will be installing for
27
28# get_install_abis:
29# Return a list of the ABIs we want to install for with
30# the last one in the list being the default.
31
32# get_all_abis:
33# Return a list of the ABIs supported by this profile.
34# the last one in the list being the default.
35
36# get_all_libdirs:
37# Returns a list of all the libdirs used by this profile. This includes
38# those that might not be touched by the current ebuild and always includes
39# "lib".
40
41# get_libdir:
42# Returns the libdir for the selected ABI. This is backwards compatible
43# and simply calls get_abi_LIBDIR() on newer profiles. You should use this
44# to determine where to install shared objects (ex: /usr/$(get_libdir))
45
46# get_abi_var <VAR> [<ABI>]:
47# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
48#
49# get_abi_CFLAGS:
50# get_abi_CDEFINE:
51# get_abi_LIBDIR:
52# Aliases for 'get_abi_var CFLAGS', etc.
53
54# get_ml_incdir [<include dir> [<ABI>]]
55# include dir defaults to /usr/include
56# ABI defaults to ${ABI} or ${DEFAULT_ABI}
57#
58# If a multilib include dir is associated with the passed include dir, then
59# we return it, otherwise, we just echo back the include dir. This is
60# neccessary when a built script greps header files rather than testing them
61# via #include (like perl) to figure out features.
62
63# prep_ml_includes:
64# Some includes (include/asm, glibc, etc) are ABI dependent. In this case,
65# We can install them in different locations for each ABI and create a common
66# header which includes the right one based on CDEFINE_${ABI}. If your
67# package installs ABI-specific headers, just add 'prep_ml_includes' to the
68# end of your src_install(). It takes a list of directories that include
69# files are installed in (default is /usr/include if none are passed).
70#
71# Example:
72# src_install() {
73# ...
74# prep_ml_includes /usr/qt/3/include
75# }
76
77# create_ml_includes <include dir> <symbol 1>:<dir 1> [<symbol 2>:<dir 2> ...]
78# If you need more control than prep_ml_includes can offer (like linux-headers
79# for the asm-* dirs, then use create_ml_includes. The firs argument is the
80# common dir. The remaining args are of the form <symbol>:<dir> where
81# <symbol> is what is put in the #ifdef for choosing that dir.
82#
83# Ideas for this code came from debian's sparc-linux headers package.
84#
85# Example:
86# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64
87# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64
88
89# get_libname [version]
90# returns libname with proper suffix {.so,.dylib} and optionally supplied version
91# for ELF/MACH-O shared objects
92#
93# Example:
94# get_libname libfoo ${PV}
95# Returns: libfoo.so.${PV} (ELF) || libfoo.${PV}.dylib (MACH)
96
97### END DOCUMENTATION ###
98 15
99# Defaults: 16# Defaults:
100export MULTILIB_ABIS=${MULTILIB_ABIS:-"default"} 17export MULTILIB_ABIS=${MULTILIB_ABIS:-"default"}
101export DEFAULT_ABI=${DEFAULT_ABI:-"default"} 18export DEFAULT_ABI=${DEFAULT_ABI:-"default"}
102export CFLAGS_default 19export CFLAGS_default
105export CTARGET_default=${CTARGET_default:-${CTARGET:-${CHOST_default}}} 22export CTARGET_default=${CTARGET_default:-${CTARGET:-${CHOST_default}}}
106export LIBDIR_default=${CONF_LIBDIR:-"lib"} 23export LIBDIR_default=${CONF_LIBDIR:-"lib"}
107export CDEFINE_default="__unix__" 24export CDEFINE_default="__unix__"
108export KERNEL_ABI=${KERNEL_ABI:-${DEFAULT_ABI}} 25export KERNEL_ABI=${KERNEL_ABI:-${DEFAULT_ABI}}
109 26
110# has_multilib_profile() 27# @FUNCTION: has_multilib_profile
28# @DESCRIPTION:
29# Return true if the current profile is a multilib profile and lists more than
30# one abi in ${MULTILIB_ABIS}. When has_multilib_profile returns true, that
31# profile should enable the 'multilib' use flag. This is so you can DEPEND on
32# a package only for multilib or not multilib.
111has_multilib_profile() { 33has_multilib_profile() {
112 [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] 34 [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
113} 35}
114 36
37# @FUNCTION: get_libdir
38# @RETURN: the libdir for the selected ABI
39# @DESCRIPTION:
115# This function simply returns the desired lib directory. With portage 40# This function simply returns the desired lib directory. With portage
116# 2.0.51, we now have support for installing libraries to lib32/lib64 41# 2.0.51, we now have support for installing libraries to lib32/lib64
117# to accomidate the needs of multilib systems. It's no longer a good idea 42# to accomidate the needs of multilib systems. It's no longer a good idea
118# to assume all libraries will end up in lib. Replace any (sane) instances 43# to assume all libraries will end up in lib. Replace any (sane) instances
119# where lib is named directly with $(get_libdir) if possible. 44# where lib is named directly with $(get_libdir) if possible.
120#
121# Travis Tilley <lv@gentoo.org> (24 Aug 2004)
122# 45#
123# Jeremy Huddleston <eradicator@gentoo.org> (23 Dec 2004): 46# Jeremy Huddleston <eradicator@gentoo.org> (23 Dec 2004):
124# Added support for ${ABI} and ${DEFAULT_ABI}. If they're both not set, 47# Added support for ${ABI} and ${DEFAULT_ABI}. If they're both not set,
125# fall back on old behavior. Any profile that has these set should also 48# fall back on old behavior. Any profile that has these set should also
126# depend on a newer version of portage (not yet released) which uses these 49# depend on a newer version of portage (not yet released) which uses these
133 else 56 else
134 get_abi_LIBDIR 57 get_abi_LIBDIR
135 fi 58 fi
136} 59}
137 60
61# @FUNCTION: get_multilibdir
62# @RETURN: Returns the multilibdir
138get_multilibdir() { 63get_multilibdir() {
139 if has_multilib_profile; then 64 if has_multilib_profile; then
140 eerror "get_multilibdir called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org" 65 eerror "get_multilibdir called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
141 exit 1 66 exit 1
142 fi 67 fi
143 echo ${CONF_MULTILIBDIR:=lib32} 68 echo ${CONF_MULTILIBDIR:=lib32}
144} 69}
145 70
71# @FUNCTION: get_libdir_override
72# @DESCRIPTION:
146# Sometimes you need to override the value returned by get_libdir. A good 73# Sometimes you need to override the value returned by get_libdir. A good
147# example of this is xorg-x11, where lib32 isnt a supported configuration, 74# example of this is xorg-x11, where lib32 isnt a supported configuration,
148# and where lib64 -must- be used on amd64 (for applications that need lib 75# and where lib64 -must- be used on amd64 (for applications that need lib
149# to be 32bit, such as adobe acrobat). Note that this override also bypasses 76# to be 32bit, such as adobe acrobat). Note that this override also bypasses
150# portage version sanity checking. 77# portage version sanity checking.
151# get_libdir_override expects one argument, the result get_libdir should 78# get_libdir_override expects one argument, the result get_libdir should
152# return: 79# return:
153# 80#
154# get_libdir_override lib64 81# get_libdir_override lib64
155#
156# Travis Tilley <lv@gentoo.org> (31 Aug 2004)
157get_libdir_override() { 82get_libdir_override() {
158 if has_multilib_profile; then 83 if has_multilib_profile; then
159 eerror "get_libdir_override called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org" 84 eerror "get_libdir_override called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"
160 exit 1 85 exit 1
161 fi 86 fi
162 CONF_LIBDIR="$1" 87 CONF_LIBDIR="$1"
163 CONF_LIBDIR_OVERRIDE="$1" 88 CONF_LIBDIR_OVERRIDE="$1"
164 LIBDIR_default="$1" 89 LIBDIR_default="$1"
165} 90}
166 91
167# get_abi_var <VAR> [<ABI>] 92# @FUNCTION: get_abi_var
93# @USAGE: <VAR> [ABI]
168# returns the value of ${<VAR>_<ABI>} which should be set in make.defaults 94# @RETURN: returns the value of ${<VAR>_<ABI>} which should be set in make.defaults
169# 95# @DESCRIPTION:
170# ex: 96# ex:
171# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32 97# CFLAGS=$(get_abi_var CFLAGS sparc32) # CFLAGS=-m32
172# 98#
173# Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)" 99# Note that the prefered method is to set CC="$(tc-getCC) $(get_abi_CFLAGS)"
174# This will hopefully be added to portage soon... 100# This will hopefully be added to portage soon...
175# 101#
176# If <ABI> is not specified, ${ABI} is used. 102# If <ABI> is not specified, ${ABI} is used.
177# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used. 103# If <ABI> is not specified and ${ABI} is not defined, ${DEFAULT_ABI} is used.
178# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string. 104# If <ABI> is not specified and ${ABI} and ${DEFAULT_ABI} are not defined, we return an empty string.
179#
180# Jeremy Huddleston <eradicator@gentoo.org>
181get_abi_var() { 105get_abi_var() {
182 local flag=$1 106 local flag=$1
183 local abi 107 local abi
184 if [ $# -gt 1 ]; then 108 if [ $# -gt 1 ]; then
185 abi=${2} 109 abi=${2}
193 117
194 local var="${flag}_${abi}" 118 local var="${flag}_${abi}"
195 echo ${!var} 119 echo ${!var}
196} 120}
197 121
122# @FUNCTION: get_abi_CFLAGS
123# @USAGE: [ABI]
124# @DESCRIPTION:
125# Alias for 'get_abi_var CFLAGS'
198get_abi_CFLAGS() { get_abi_var CFLAGS "$@"; } 126get_abi_CFLAGS() { get_abi_var CFLAGS "$@"; }
127
128# @FUNCTION: get_abi_ASFLAGS
129# @USAGE: [ABI]
130# @DESCRIPTION:
131# Alias for 'get_abi_var ASFLAGS'
199get_abi_ASFLAGS() { get_abi_var ASFLAGS "$@"; } 132get_abi_ASFLAGS() { get_abi_var ASFLAGS "$@"; }
133
134# @FUNCTION: get_abi_LDFLAGS
135# @USAGE: [ABI]
136# @DESCRIPTION:
137# Alias for 'get_abi_var LDFLAGS'
200get_abi_LDFLAGS() { get_abi_var LDFLAGS "$@"; } 138get_abi_LDFLAGS() { get_abi_var LDFLAGS "$@"; }
139
140# @FUNCTION: get_abi_CHOST
141# @USAGE: [ABI]
142# @DESCRIPTION:
143# Alias for 'get_abi_var CHOST'
201get_abi_CHOST() { get_abi_var CHOST "$@"; } 144get_abi_CHOST() { get_abi_var CHOST "$@"; }
145
146# @FUNCTION: get_abi_CTARGET
147# @USAGE: [ABI]
148# @DESCRIPTION:
149# Alias for 'get_abi_var CTARGET'
202get_abi_CTARGET() { get_abi_var CTARGET "$@"; } 150get_abi_CTARGET() { get_abi_var CTARGET "$@"; }
151
152# @FUNCTION: get_abi_FAKE_TARGETS
153# @USAGE: [ABI]
154# @DESCRIPTION:
155# Alias for 'get_abi_var FAKE_TARGETS'
203get_abi_FAKE_TARGETS() { get_abi_var FAKE_TARGETS "$@"; } 156get_abi_FAKE_TARGETS() { get_abi_var FAKE_TARGETS "$@"; }
157
158# @FUNCTION: get_abi_CDEFINE
159# @USAGE: [ABI]
160# @DESCRIPTION:
161# Alias for 'get_abi_var CDEFINE'
204get_abi_CDEFINE() { get_abi_var CDEFINE "$@"; } 162get_abi_CDEFINE() { get_abi_var CDEFINE "$@"; }
163
164# @FUNCTION: get_abi_LIBDIR
165# @USAGE: [ABI]
166# @DESCRIPTION:
167# Alias for 'get_abi_var LIBDIR'
205get_abi_LIBDIR() { get_abi_var LIBDIR "$@"; } 168get_abi_LIBDIR() { get_abi_var LIBDIR "$@"; }
206 169
170# @FUNCTION: get_install_abis
171# @DESCRIPTION:
207# Return a list of the ABIs we want to install for with 172# Return a list of the ABIs we want to install for with
208# the last one in the list being the default. 173# the last one in the list being the default.
209get_install_abis() { 174get_install_abis() {
210 local order="" 175 local order=""
211 176
212 if [[ -z ${MULTILIB_ABIS} ]] ; then 177 if [[ -z ${MULTILIB_ABIS} ]] ; then
213 echo "default" 178 echo "default"
214 return 0 179 return 0
215 fi 180 fi
216 181
217 if hasq multilib-pkg-force ${RESTRICT} || 182 if [[ ${EMULTILIB_PKG} == "true" ]] ; then
218 { hasq multilib-pkg ${FEATURES} && hasq multilib-pkg ${RESTRICT}; }; then
219 for x in ${MULTILIB_ABIS} ; do 183 for x in ${MULTILIB_ABIS} ; do
220 if [[ ${x} != "${DEFAULT_ABI}" ]] ; then 184 if [[ ${x} != "${DEFAULT_ABI}" ]] ; then
221 hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}" 185 hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}"
222 fi 186 fi
223 done 187 done
242 206
243 echo ${order} 207 echo ${order}
244 return 0 208 return 0
245} 209}
246 210
211# @FUNCTION: get_all_abis
212# @DESCRIPTION:
247# Return a list of the ABIs supported by this profile. 213# Return a list of the ABIs supported by this profile.
248# the last one in the list being the default. 214# the last one in the list being the default.
249get_all_abis() { 215get_all_abis() {
250 local order="" 216 local order=""
251 217
263 229
264 echo ${order} 230 echo ${order}
265 return 0 231 return 0
266} 232}
267 233
268# get_all_libdirs() 234# @FUNCTION: get_all_libdirs
235# @DESCRIPTION:
269# Returns a list of all the libdirs used by this profile. This includes 236# Returns a list of all the libdirs used by this profile. This includes
270# those that might not be touched by the current ebuild. 237# those that might not be touched by the current ebuild and always includes
238# "lib".
271get_all_libdirs() { 239get_all_libdirs() {
272 local libdirs="lib" 240 local libdirs="lib"
273 local abi 241 local abi
274 local dir 242 local dir
275 243
278 done 246 done
279 247
280 echo "${libdirs}" 248 echo "${libdirs}"
281} 249}
282 250
251# @FUNCTION: is_final_abi
252# @DESCRIPTION:
283# Return true if ${ABI} is the last ABI on our list (or if we're not 253# Return true if ${ABI} is the last ABI on our list (or if we're not
284# using the new multilib configuration. This can be used to determine 254# using the new multilib configuration. This can be used to determine
285# if we're in the last (or only) run through src_{unpack,compile,install} 255# if we're in the last (or only) run through src_{unpack,compile,install}
286is_final_abi() { 256is_final_abi() {
287 has_multilib_profile || return 0 257 has_multilib_profile || return 0
288 local ALL_ABIS=$(get_install_abis) 258 local ALL_ABIS=$(get_install_abis)
289 local LAST_ABI=${ALL_ABIS/* /} 259 local LAST_ABI=${ALL_ABIS/* /}
290 [[ ${LAST_ABI} == ${ABI} ]] 260 [[ ${LAST_ABI} == ${ABI} ]]
291} 261}
292 262
263# @FUNCTION: number_abis
264# @DESCRIPTION:
293# echo the number of ABIs we will be installing for 265# echo the number of ABIs we will be installing for
294number_abis() { 266number_abis() {
295 get_install_abis | wc -w 267 get_install_abis | wc -w
296} 268}
297 269
298# get_ml_incdir [<include dir> [<ABI>]] 270# @FUNCTION: get_ml_incdir
271# @USAGE: [include_dir] [ABI]
272# @DESCRIPTION:
299# include dir defaults to /usr/include 273# include dir defaults to /usr/include
300# ABI defaults to ${ABI} or ${DEFAULT_ABI} 274# ABI defaults to ${ABI} or ${DEFAULT_ABI}
275#
276# If a multilib include dir is associated with the passed include dir, then
277# we return it, otherwise, we just echo back the include dir. This is
278# neccessary when a built script greps header files rather than testing them
279# via #include (like perl) to figure out features.
301get_ml_incdir() { 280get_ml_incdir() {
302 local dir=/usr/include 281 local dir=/usr/include
303 282
304 if [[ $# -gt 0 ]]; then 283 if [[ $# -gt 0 ]]; then
305 incdir=$1 284 incdir=$1
322 else 301 else
323 echo ${dir} 302 echo ${dir}
324 fi 303 fi
325} 304}
326 305
327# prep_ml_includes: 306# @FUNCTION: prep_ml_includes
328# 307# @DESCRIPTION:
329# Some includes (include/asm, glibc, etc) are ABI dependent. In this case, 308# Some includes (include/asm, glibc, etc) are ABI dependent. In this case,
330# We can install them in different locations for each ABI and create a common 309# We can install them in different locations for each ABI and create a common
331# header which includes the right one based on CDEFINE_${ABI}. If your 310# header which includes the right one based on CDEFINE_${ABI}. If your
332# package installs ABI-specific headers, just add 'prep_ml_includes' to the 311# package installs ABI-specific headers, just add 'prep_ml_includes' to the
333# end of your src_install(). It takes a list of directories that include 312# end of your src_install(). It takes a list of directories that include
334# files are installed in (default is /usr/include if none are passed). 313# files are installed in (default is /usr/include if none are passed).
335# 314#
336# Example: 315# Example:
337# src_install() { 316# src_install() {
338# ... 317# ...
339# prep_ml_includes /usr/qt/3/include 318# prep_ml_includes /usr/qt/3/include
340# } 319# }
341
342prep_ml_includes() { 320prep_ml_includes() {
343 if [[ $(number_abis) -gt 1 ]] ; then 321 if [[ $(number_abis) -gt 1 ]] ; then
344 local dir 322 local dir
345 local dirs 323 local dirs
346 local base 324 local base
377 done 355 done
378 fi 356 fi
379 fi 357 fi
380} 358}
381 359
360# @FUNCTION: create_ml_includes
361# @USAGE: <include_dir> <symbol_1>:<dir_1> [<symbol_2>:<dir_2>...]
362# @DESCRIPTION:
382# If you need more control than prep_ml_includes can offer (like linux-headers 363# If you need more control than prep_ml_includes can offer (like linux-headers
383# for the asm-* dirs, then use create_ml_includes. The firs argument is the 364# for the asm-* dirs, then use create_ml_includes. The firs argument is the
384# common dir. The remaining args are of the form <symbol>:<dir> where 365# common dir. The remaining args are of the form <symbol>:<dir> where
385# <symbol> is what is put in the #ifdef for choosing that dir. 366# <symbol> is what is put in the #ifdef for choosing that dir.
386# 367#
387# Ideas for this code came from debian's sparc-linux headers package. 368# Ideas for this code came from debian's sparc-linux headers package.
388# 369#
389# Example: 370# Example:
390# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64 371# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64
391# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64 372# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64
392# 373#
393# Warning: Be careful with the ordering here. The default ABI has to be the 374# Warning: Be careful with the ordering here. The default ABI has to be the
394# last, because it is always defined (by GCC) 375# last, because it is always defined (by GCC)
395create_ml_includes() { 376create_ml_includes() {
396 local dest=$1 377 local dest=$1
532 echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@" 513 echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@"
533 # exit because we'll likely be called from a subshell 514 # exit because we'll likely be called from a subshell
534 exit 1 515 exit 1
535} 516}
536 517
518# @FUNCTION: get_libname
519# @USAGE: [version]
520# @DESCRIPTION:
521# Returns libname with proper suffix {.so,.dylib} and optionally supplied version
522# for ELF/MACH-O shared objects
523#
524# Example:
525# get_libname libfoo ${PV}
526# Returns: libfoo.so.${PV} (ELF) || libfoo.${PV}.dylib (MACH)
537get_libname() { 527get_libname() {
538 local libname 528 local libname
539 local ver=$1 529 local ver=$1
540 case ${CHOST} in 530 case ${CHOST} in
531 *-cygwin|mingw*|*-mingw*) libname="dll";;
541 *-darwin*) libname="dylib";; 532 *-darwin*) libname="dylib";;
542 *) libname="so";; 533 *) libname="so";;
543 esac 534 esac
544 535
545 if [[ -z $@ ]] ; then 536 if [[ -z $* ]] ; then
546 echo ".${libname}" 537 echo ".${libname}"
547 else 538 else
548 for ver in "$@" ; do 539 for ver in "$@" ; do
549 case ${CHOST} in 540 case ${CHOST} in
550 *-darwin*) echo ".${ver}.${libname}";; 541 *-darwin*) echo ".${ver}.${libname}";;
628 export LIBDIR_s390x="lib64" 619 export LIBDIR_s390x="lib64"
629 620
630 export MULTILIB_ABIS="s390x s390" 621 export MULTILIB_ABIS="s390x s390"
631 export DEFAULT_ABI="s390x" 622 export DEFAULT_ABI="s390x"
632 ;; 623 ;;
633 sparc64*) 624 sparc*)
634 export CFLAGS_sparc32=${CFLAGS_sparc32--m32} 625 export CFLAGS_sparc32=${CFLAGS_sparc32}
635 export CHOST_sparc32=${CTARGET/sparc64/sparc} 626 export CHOST_sparc32=${CTARGET/sparc64/sparc}
636 export CTARGET_sparc32=${CHOST_sparc32} 627 export CTARGET_sparc32=${CHOST_sparc32}
637 export CDEFINE_sparc32="!__arch64__" 628 export CDEFINE_sparc32="!__arch64__"
638 export LIBDIR_sparc32="lib" 629 export LIBDIR_sparc32="lib"
639 630
641 export CHOST_sparc64=${CTARGET} 632 export CHOST_sparc64=${CTARGET}
642 export CTARGET_sparc64=${CHOST_sparc64} 633 export CTARGET_sparc64=${CHOST_sparc64}
643 export CDEFINE_sparc64="__arch64__" 634 export CDEFINE_sparc64="__arch64__"
644 export LIBDIR_sparc64="lib64" 635 export LIBDIR_sparc64="lib64"
645 636
646 export MULTILIB_ABIS="sparc64 sparc32" 637 export MULTILIB_ABIS="${MULTILIB_ABIS-sparc64 sparc32}"
647 export DEFAULT_ABI="sparc64" 638 export DEFAULT_ABI="${DEFAULT_ABI-sparc64}"
648 ;; 639 ;;
649 *) 640 *)
650 export MULTILIB_ABIS="default" 641 export MULTILIB_ABIS="default"
651 export DEFAULT_ABI="default" 642 export DEFAULT_ABI="default"
652 ;; 643 ;;
653 esac 644 esac
654} 645}
655 646
647# @FUNCTION: multilib_toolchain_setup
648# @DESCRIPTION:
656# Hide multilib details here for packages which are forced to be compiled for a 649# Hide multilib details here for packages which are forced to be compiled for a
657# specific ABI when run on another ABI (like x86-specific packages on amd64) 650# specific ABI when run on another ABI (like x86-specific packages on amd64)
658multilib_toolchain_setup() { 651multilib_toolchain_setup() {
659 export ABI=$1 652 export ABI=$1
653
654 # disable ccache for non-native builds #196243. this is because how
655 # we cram ABI related CFLAGS behind the back of the gcc frontend with
656 # the gcc-config wrapper.
657 if [[ ${ABI} != ${DEFAULT_ABI} ]] ; then
658 : ${CCACHE_DISABLE:=multilib-disable}
659 else
660 if [[ ${CCACHE_DISABLE} == "multilib-disable" ]] ; then
661 unset CCACHE_DISABLE
662 fi
663 fi
664 export CCACHE_DISABLE
660 665
661 if has_version app-admin/eselect-compiler ; then 666 if has_version app-admin/eselect-compiler ; then
662 # Binutils doesn't have wrappers for ld and as (yet). Eventually it 667 # Binutils doesn't have wrappers for ld and as (yet). Eventually it
663 # will, and all this can just be handled with CHOST. 668 # will, and all this can just be handled with CHOST.
664 export LD="ld $(get_abi_LDFLAGS $1)" 669 export LD="ld $(get_abi_LDFLAGS $1)"

Legend:
Removed from v.1.60  
changed lines
  Added in v.1.70

  ViewVC Help
Powered by ViewVC 1.1.20