* [gentoo-user] Failed to emerge media-sound/alsa-driver-1.0.18a
@ 2009-01-22 2:01 Guillermo Garron
2009-01-22 2:26 ` [gentoo-user] " Guillermo Garron
2009-01-22 2:40 ` Guillermo Garron
0 siblings, 2 replies; 3+ messages in thread
From: Guillermo Garron @ 2009-01-22 2:01 UTC (permalink / raw
To: gentoo-user
[-- Attachment #1: Type: text/plain, Size: 1530 bytes --]
Hi,
I have tried to make a full upgrade of my system.
Using
emerge --update --newuse --deep world
but I got this error:
*********************************************************
Failed to emerge media-sound/alsa-driver-1.0.18a, Log file:
>>> '/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/build.log'
* Messages for package media-sound/alsa-driver-1.0.18a:
*
* ERROR: media-sound/alsa-driver-1.0.18a failed.
* Call stack:
* ebuild.sh, line 49: Called src_compile
* environment, line 3951: Called die
* The specific snippet of code:
* emake LDFLAGS="$(raw-ldflags)" HOSTCC="$(tc-getBUILD_CC)"
CC="$(tc-getCC)" || die "Make Failed";
* The die message:
* Make Failed
*
* If you need support, post the topmost build error, and the call
stack if relevant.
* A complete build log is located at
'/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/build.log'.
* The ebuild environment file is located at
'/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/environment'.
*
***************************************************************************
I am not new to Linux, but I use mostly Debian, and I am new to
Gentoo, so actually I am stucked here for two weeks :(.
I am also attaching the files it mentions in the above message.
please help me.
regards,
--
Guillermo Garron
"Linux IS user friendly... It's just selective about who its friends are."
(Using Gentoo, Debian, Crunchbang, Ubuntu)
http://feeds.feedburner.com/go2linux
http://www.go2linux.org
[-- Attachment #2: environment --]
[-- Type: application/octet-stream, Size: 160711 bytes --]
ALSA_CARDS=' ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci'
ALSA_PCM_PLUGINS='adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol'
APACHE2_MODULES='actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias'
ARCH=x86
AT_GNUCONF_UPDATE=no
AT_M4DIR=
CBUILD=i686-pc-linux-gnu
CDEFINE_default=__unix__
CFLAGS='-O2 -march=i686 -pipe'
CFLAGS_default=
CHOST=i686-pc-linux-gnu
CHOST_default=i686-pc-linux-gnu
CROSSCOMPILE_OPTS=
CTARGET_default=i686-pc-linux-gnu
CVS_RSH=ssh
CXXFLAGS='-O2 -march=i686 -pipe'
DEFAULT_ABI=default
DEPEND=$'virtual/modutils\n\t>=media-sound/alsa-headers-1.0.17\n\tvirtual/linux-sources\n\tsys-apps/debianutils =sys-devel/automake-1.10*\n\t>=sys-devel/autoconf-2.61 sys-devel/libtool kernel_linux? ( virtual/linux-sources ) kernel_linux? ( virtual/modutils )\n\tsys-apps/sed kernel_linux? ( virtual/linux-sources )'
DESCRIPTION='Advanced Linux Sound Architecture kernel modules'
DESTTREE=/usr
DIROPTIONS=-m0755
EAPI=0
ELIBC=glibc
ELIBTOOL_VERSION=2.0.2
ELT_APPLIED_PATCHES=
ELT_LTMAIN_SH=
ELT_PATCH_DIR=/usr/portage/eclass/ELT-patches
EPATCH_EXCLUDE=
EPATCH_FORCE=no
EPATCH_MULTI_MSG='Applying various patches (bugfixes/updates) ...'
EPATCH_OPTS='-g0 -E --no-backup-if-mismatch'
EPATCH_SINGLE_MSG=
EPATCH_SOURCE=/var/tmp/portage/media-sound/alsa-driver-1.0.18a/work/patch
EPATCH_SUFFIX=patch.bz2
EXEOPTIONS=-m0755
FEATURES='distlocks fixpackages parallel-fetch protect-owned sandbox sfperms strict unmerge-orphans userfetch'
GCC_SPECS=
GDK_USE_XFT=1
HOMEPAGE=http://www.alsa-project.org/
INHERITED='toolchain-funcs portability flag-o-matic versionator multilib libtool linux-info autotools linux-mod eutils'
INPUT_DEVICES='keyboard mouse'
INSDESTTREE=
INSOPTIONS=-m0644
IUSE='oss debug midi alsa_cards_seq-dummy alsa_cards_dummy alsa_cards_virmidi alsa_cards_mtpav alsa_cards_mts64 alsa_cards_serial-u16550 alsa_cards_mpu401 alsa_cards_loopback alsa_cards_portman2x4 alsa_cards_ad1848-lib alsa_cards_adlib alsa_cards_ad1816a alsa_cards_ad1848 alsa_cards_als100 alsa_cards_azt2320 alsa_cards_cmi8330 alsa_cards_cs4231 alsa_cards_cs4232 alsa_cards_cs4236 alsa_cards_dt019x alsa_cards_es968 alsa_cards_es1688 alsa_cards_es18xx alsa_cards_gusclassic alsa_cards_gusextreme alsa_cards_gusmax alsa_cards_interwave alsa_cards_interwave-stb alsa_cards_opl3sa2 alsa_cards_opti92x-ad1848 alsa_cards_opti92x-cs4231 alsa_cards_opti93x alsa_cards_miro alsa_cards_sb8 alsa_cards_sb16 alsa_cards_sbawe alsa_cards_sgalaxy alsa_cards_sscape alsa_cards_wavefront alsa_cards_pc98-cs4232 alsa_cards_msnd-pinnacle alsa_cards_ad1889 alsa_cards_als300 alsa_cards_als4000 alsa_cards_ali5451 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_au8810 alsa_cards_au8820 alsa_cards_au8830 alsa_cards_azt3328 alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_cs4281 alsa_cards_cs46xx alsa_cards_cs5535audio alsa_cards_darla20 alsa_cards_gina20 alsa_cards_layla20 alsa_cards_darla24 alsa_cards_gina24 alsa_cards_layla24 alsa_cards_mona alsa_cards_mia alsa_cards_echo3g alsa_cards_indigo alsa_cards_indigoio alsa_cards_indigodj alsa_cards_emu10k1 alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_fm801-tea575x alsa_cards_hda-intel alsa_cards_hdsp alsa_cards_hdspm alsa_cards_ice1712 alsa_cards_ice1724 alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_korg1212 alsa_cards_maestro3 alsa_cards_mixart alsa_cards_nm256 alsa_cards_pcxhr alsa_cards_riptide alsa_cards_rme32 alsa_cards_rme96 alsa_cards_rme9652 alsa_cards_sonicvibes alsa_cards_trident alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_vx222 alsa_cards_ymfpci alsa_cards_pdplus alsa_cards_asihpi alsa_cards_powermac alsa_cards_aoa alsa_cards_aoa-fabric-layout alsa_cards_aoa-onyx alsa_cards_aoa-tas alsa_cards_aoa-toonie alsa_cards_aoa-soundbus alsa_cards_aoa-soundbus-i2s alsa_cards_sa11xx-uda1341 alsa_cards_armaaci alsa_cards_s3c2410 alsa_cards_pxa2xx-i2sound alsa_cards_au1x00 alsa_cards_usb-audio alsa_cards_usb-usx2y alsa_cards_usb-us122l alsa_cards_vxpocket alsa_cards_pdaudiocf alsa_cards_sun-amd7930 alsa_cards_sun-cs4231 alsa_cards_sun-dbri alsa_cards_harmony alsa_cards_soc alsa_cards_at91-soc alsa_cards_at91-soc-eti-b1-wm8731 alsa_cards_pxa2xx-soc alsa_cards_pxa2xx-soc-corgi alsa_cards_pxa2xx-soc-spitz alsa_cards_pxa2xx-soc-poodle alsa_cards_pxa2xx-soc-tosa alsa_cards_hifier alsa_cards_ml403-ac97cr alsa_cards_oxygen alsa_cards_pxa2xx-soc-e800 alsa_cards_sis7019 alsa_cards_virtuoso kernel_linux'
IUSE_CARDS=$'seq-dummy dummy virmidi mtpav mts64 serial-u16550 mpu401\nloopback portman2x4 ad1848-lib adlib ad1816a ad1848\nals100 azt2320 cmi8330 cs4231 cs4232 cs4236 dt019x es968 es1688 es18xx\ngusclassic gusextreme gusmax interwave interwave-stb opl3sa2\nopti92x-ad1848 opti92x-cs4231 opti93x miro sb8 sb16 sbawe sgalaxy\nsscape wavefront pc98-cs4232 msnd-pinnacle ad1889 als300 als4000\nali5451 atiixp atiixp-modem au8810 au8820 au8830 azt3328 bt87x ca0106\ncmipci cs4281 cs46xx cs5535audio darla20 gina20 layla20 darla24 gina24\nlayla24 mona mia echo3g indigo indigoio indigodj emu10k1 emu10k1x\nens1370 ens1371 es1938 es1968 fm801 fm801-tea575x hda-intel hdsp hdspm\nice1712 ice1724 intel8x0 intel8x0m korg1212 maestro3 mixart nm256\npcxhr riptide rme32 rme96 rme9652 sonicvibes trident via82xx\nvia82xx-modem vx222 ymfpci pdplus asihpi powermac aoa\naoa-fabric-layout aoa-onyx aoa-tas aoa-toonie aoa-soundbus\naoa-soundbus-i2s sa11xx-uda1341 armaaci s3c2410 pxa2xx-i2sound au1x00\nusb-audio usb-usx2y usb-us122l vxpocket pdaudiocf sun-amd7930 sun-cs4231 sun-dbri\nharmony soc at91-soc at91-soc-eti-b1-wm8731 pxa2xx-soc\npxa2xx-soc-corgi pxa2xx-soc-spitz pxa2xx-soc-poodle pxa2xx-soc-tosa hifier\nml403-ac97cr oxygen pxa2xx-soc-e800 sis7019 virtuoso'
KERNEL=linux
KERNEL_ABI=default
KERNEL_DIR=/usr/src/linux
KEYWORDS='~alpha ~amd64 ~mips ~ppc ~ppc64 ~x86'
KV=2.6.25-gentoo-r8
KV_DIR=/usr/src/linux
KV_EXTRA=-gentoo-r8
KV_FULL=2.6.25-gentoo-r8
KV_LOCAL=
KV_MAJOR=2
KV_MINOR=6
KV_OBJ=ko
KV_OUT_DIR=/lib/modules/2.6.25-gentoo-r8/build
KV_PATCH=25
LCD_DEVICES='bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text'
LDFLAGS=-Wl,-O1
LDFLAGS_default=
LIBDIR_default=lib
LIBOPTIONS=-m0644
LICENSE=GPL-2
MAKEOPTS=-j3
MULTILIB_ABIS=default
MY_P=alsa-driver-1.0.18a
NETBEANS='apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml'
OPENGL_PROFILE=nvidia
OUTPUT_DIR=/lib/modules/2.6.25-gentoo-r8/build
PDEPEND=' '
PKG_CONFIG_PATH=/usr/qt/3/lib/pkgconfig
PORTAGE_COMPRESS_EXCLUDE_SUFFIXES='css gif htm[l]? jp[e]?g js pdf png'
PROFILE_ONLY_VARIABLES='ARCH ELIBC KERNEL USERLAND'
PROPERTIES=
PROVIDE=virtual/alsa
QMAKESPEC=linux-g++
QTDIR=/usr/qt/3
RDEPEND='virtual/modutils kernel_linux? ( virtual/modutils ) '
RESTRICT=
S=/var/tmp/portage/media-sound/alsa-driver-1.0.18a/work/alsa-driver-1.0.18a
SANDBOX_DENY=/etc/ld.so.preload
SANDBOX_PREDICT=:/dev/console:/dev/random:/proc/self/maps:/usr/lib/python2.0/:/usr/lib/python2.1/:/usr/lib/python2.2/:/usr/lib/python2.3/:/usr/lib/python2.4/:/usr/lib/python2.5/:/usr/lib/python3.0/:/var/db/aliases.db:/var/db/ethers.db:/var/db/group.db:/var/db/hosts.db:/var/db/netgroup.db:/var/db/netmasks.db:/var/db/networks.db:/var/db/passwd.db:/var/db/protocols.db:/var/db/rpc.db:/var/db/services.db:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.:
SANDBOX_READ=:/:/dev/shm:/dev/stdin:/var/tmp:
SANDBOX_WRITE=:/dev/console:/dev/fd:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/shm/ngpt:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.bash_history:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.gconfd/lock:
SGML_CATALOG_FILES=/etc/sgml/sgml-docbook.cat:/etc/sgml/sgml-docbook-3.1.cat:/etc/sgml/sgml-ent.cat:/etc/sgml/openjade-1.3.2.cat:/etc/sgml/dsssl-docbook-stylesheets.cat:/etc/sgml/sgml-lite.cat
SLOT=0
SRC_URI=mirror://alsaproject/driver/alsa-driver-1.0.18a.tar.bz2
USE='alsa_cards_ali5451 alsa_cards_als4000 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_emu10k1 alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_hda-intel alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_maestro3 alsa_cards_trident alsa_cards_usb-audio alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_ymfpci elibc_glibc kernel_linux midi userland_GNU x86'
USERLAND=GNU
VIDEO_CARDS=
WANT_AUTOCONF=2.5
WANT_AUTOMAKE=1.10
_=PKG_INSTALL_MASK
_E_DOCDESTTREE_=
_E_EXEDESTTREE_=
___ECLASS_RECUR_MULTILIB=yes
___ECLASS_RECUR_TOOLCHAIN_FUNCS=yes
_pipestatus='0 0'
card=ymfpci
conf=alsa-driver-1.0.18a-r0
iuse_card=virtuoso
repository=gentoo
str='use_m: entering function'
ELT_find_ltmain_sh ()
{
local x=;
local dirlist=;
for x in $(find "${S}" -name 'ltmain.sh');
do
dirlist="${dirlist} ${x%/*}";
done;
echo "${dirlist}"
}
ELT_libtool_version ()
{
local ltmain_sh=$1;
local version=;
version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); echo "${VERSION}");
[[ -z ${version} ]] && version="0";
echo "${version}"
}
ELT_try_and_apply_patch ()
{
local ret=0;
local file=$1;
local patch=$2;
if patch -p0 --dry-run "${file}" "${patch}" >&"${T}/elibtool.log"; then
einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ...";
patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >&"${T}/elibtool.log";
ret=$?;
export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}";
else
ret=1;
fi;
return "${ret}"
}
ELT_walk_patches ()
{
local x=;
local y=;
local ret=1;
local file=$1;
local patch_set=$2;
local patch_dir=;
local rem_int_dep=$3;
if [[ -n ${patch_set} ]]; then
if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]]; then
patch_dir="${ELT_PATCH_DIR}/${patch_set}";
else
return "${ret}";
fi;
for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r);
do
if [[ -n ${x} && -f ${x} ]]; then
if [[ -n ${rem_int_dep} ]]; then
sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > "${T}/$$.rem_int_deps.patch";
x="${T}/$$.rem_int_deps.patch";
fi;
if ELT_try_and_apply_patch "${file}" "${x}"; then
ret=0;
break;
fi;
fi;
done;
fi;
return "${ret}"
}
VER_major ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
echo "${VER%%[^[:digit:]]*}"
}
VER_micro ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
VER=${VER#*.*.};
echo "${VER%%[^[:digit:]]*}"
}
VER_minor ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
VER=${VER#*.};
echo "${VER%%[^[:digit:]]*}"
}
VER_to_int ()
{
[[ -z $1 ]] && return 1;
local VER_MAJOR=$(VER_major "$1");
local VER_MINOR=$(VER_minor "$1");
local VER_MICRO=$(VER_micro "$1");
local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
if [[ ${VER_int} -ge 65536 ]]; then
echo "${VER_int}";
return 0;
fi;
echo 1;
return 1
}
__versionator__test_version_compare ()
{
__versionator_shopt_toggle on;
local lt=1 eq=2 gt=3 p q;
function __versionator__test_version_compare_t ()
{
version_compare "${1}" "${3}";
local r=$?;
[[ ${r} -eq ${2} ]] || echo "FAIL: ${@} (got ${r} exp ${2})"
};
echo "
0 $lt 1
1 $lt 2
2 $gt 1
2 $eq 2
0 $eq 0
10 $lt 20
68 $eq 068
068 $gt 67
068 $lt 69
1.0 $lt 2.0
2.0 $eq 2.0
2.0 $gt 1.0
1.0 $gt 0.0
0.0 $eq 0.0
0.0 $lt 1.0
0.1 $lt 0.2
0.2 $eq 0.2
0.3 $gt 0.2
1.2 $lt 2.1
2.1 $gt 1.2
1.2.3 $lt 1.2.4
1.2.4 $gt 1.2.3
1.2.0 $eq 1.2
1.2.1 $gt 1.2
1.2 $lt 1.2.1
1.2b $eq 1.2b
1.2b $lt 1.2c
1.2b $gt 1.2a
1.2b $gt 1.2
1.2 $lt 1.2a
1.3 $gt 1.2a
1.3 $lt 1.3a
1.0_alpha7 $lt 1.0_beta7
1.0_beta $lt 1.0_pre
1.0_pre5 $lt 1.0_rc2
1.0_rc2 $lt 1.0
1.0_p1 $gt 1.0
1.0_p1-r1 $gt 1.0_p1
1.0_alpha6-r1 $gt 1.0_alpha6
1.0_beta6-r1 $gt 1.0_alpha6-r2
1.0_pre1 $lt 1.0-p1
1.0p $gt 1.0_p1
1.0r $gt 1.0-r1
1.6.15 $gt 1.6.10-r2
1.6.10-r2 $lt 1.6.15
" | while read a b c; do
[[ -z "${a}${b}${c}" ]] && continue;
__versionator__test_version_compare_t "${a}" "${b}" "${c}";
done;
for q in "alpha beta pre rc=${lt};${gt}" "p r=${gt};${lt}";
do
for p in ${q%%=*};
do
local c=${q##*=};
local alt=${c%%;*} agt=${c##*;};
__versionator__test_version_compare_t "1.0" $agt "1.0_${p}";
__versionator__test_version_compare_t "1.0" $agt "1.0_${p}1";
__versionator__test_version_compare_t "1.0" $agt "1.0_${p}068";
__versionator__test_version_compare_t "2.0_${p}" $alt "2.0";
__versionator__test_version_compare_t "2.0_${p}1" $alt "2.0";
__versionator__test_version_compare_t "2.0_${p}068" $alt "2.0";
__versionator__test_version_compare_t "1.0_${p}" $eq "1.0_${p}";
__versionator__test_version_compare_t "0.0_${p}" $lt "0.0_${p}1";
__versionator__test_version_compare_t "666_${p}3" $gt "666_${p}";
__versionator__test_version_compare_t "1_${p}7" $lt "1_${p}8";
__versionator__test_version_compare_t "1_${p}7" $eq "1_${p}7";
__versionator__test_version_compare_t "1_${p}7" $gt "1_${p}6";
__versionator__test_version_compare_t "1_${p}09" $eq "1_${p}9";
done;
done;
for p in "-r" "_p";
do
__versionator__test_version_compare_t "7.2${p}1" $lt "7.2${p}2";
__versionator__test_version_compare_t "7.2${p}2" $gt "7.2${p}1";
__versionator__test_version_compare_t "7.2${p}3" $gt "7.2${p}2";
__versionator__test_version_compare_t "7.2${p}2" $lt "7.2${p}3";
done;
__versionator_shopt_toggle off
}
__versionator_shopt_toggle ()
{
VERSIONATOR_RECURSION=${VERSIONATOR_RECURSION:-0};
case "$1" in
"on")
if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then
VERSIONATOR_OLD_EXTGLOB=$(shopt -p extglob);
shopt -s extglob;
fi;
VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION + 1 ))
;;
"off")
VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION - 1 ));
if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then
eval $VERSIONATOR_OLD_EXTGLOB;
fi
;;
esac;
return 0
}
_cdrom_locate_file_on_cd ()
{
local mline="";
local showedmsg=0 showjolietmsg=0;
while [[ -z ${CDROM_ROOT} ]]; do
local i=0;
local -a cdset=(${*//:/ });
if [[ -n ${CDROM_SET} ]]; then
cdset=(${cdset[${CDROM_SET}]});
fi;
while [[ -n ${cdset[${i}]} ]]; do
local dir=$(dirname ${cdset[${i}]});
local file=$(basename ${cdset[${i}]});
local point= node= fs= foo=;
while read point node fs foo; do
[[ " cd9660 iso9660 udf " != *" ${fs} "* ]] && ! [[ ${fs} == "subfs" && ",${opts}," == *",fs=cdfss,"* ]] && continue;
point=${point//\040/ };
[[ ! -d ${point}/${dir} ]] && continue;
[[ -z $(find "${point}/${dir}" -maxdepth 1 -iname "${file}") ]] && continue;
export CDROM_ROOT=${point};
export CDROM_SET=${i};
export CDROM_MATCH=${cdset[${i}]};
return;
done <<< "$(get_mounts)";
((++i));
done;
echo;
if [[ ${showedmsg} -eq 0 ]]; then
if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
if [[ -z ${CDROM_NAME} ]]; then
einfo "Please insert+mount the cdrom for ${PN} now !";
else
einfo "Please insert+mount the ${CDROM_NAME} cdrom now !";
fi;
else
if [[ -z ${CDROM_NAME_1} ]]; then
einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !";
else
local var="CDROM_NAME_${CDROM_CURRENT_CD}";
einfo "Please insert+mount the ${!var} cdrom now !";
fi;
fi;
showedmsg=1;
fi;
einfo "Press return to scan for the cd again";
einfo "or hit CTRL+C to abort the emerge.";
echo;
if [[ ${showjolietmsg} -eq 0 ]]; then
showjolietmsg=1;
else
ewarn "If you are having trouble with the detection";
ewarn "of your CD, it is possible that you do not have";
ewarn "Joliet support enabled in your kernel. Please";
ewarn "check that CONFIG_JOLIET is enabled in your kernel.";
ebeep 5;
fi;
read || die "something is screwed with your system";
done
}
_elibtoolize ()
{
local opts;
[[ -n $(autotools_check_macro AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT) ]] || return 0;
[[ -f GNUmakefile.am || -f Makefile.am ]] && opts="--automake";
[[ "${USERLAND}" == "Darwin" ]] && LIBTOOLIZE="glibtoolize";
autotools_run_tool ${LIBTOOLIZE:-libtoolize} "$@" ${opts};
eaclocal
}
_filter-hardened ()
{
local f;
for f in "$@";
do
case "${f}" in
-fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie)
gcc-specs-pie || continue;
is-flagq -nopie || append-flags -nopie
;;
-fstack-protector)
gcc-specs-ssp || continue;
is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector)
;;
-fstack-protector-all)
gcc-specs-ssp-to-all || continue;
is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all)
;;
-fno-strict-overflow)
gcc-specs-nostrict || continue;
is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow)
;;
esac;
done
}
_filter-var ()
{
local f x VAR VAL;
declare -a new;
VAR=$1;
shift;
eval VAL=\${${VAR}};
for f in ${VAL};
do
for x in "$@";
do
[[ ${f} == ${x} ]] && continue 2;
done;
eval new\[\${\#new\[@]}]=\${f};
done;
eval export ${VAR}=\${new\[*]}
}
_gcc-install-dir ()
{
echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')"
}
_gcc-specs-directive_raw ()
{
local cc=$(tc-getCC);
local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
$1=="*"directive":" { pspec=spec; spec=""; outside=0; next }
outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
{ spec=spec $0 }
END { print spec }';
return 0
}
_gcc-specs-exists ()
{
[[ -f $(_gcc-install-dir)/$1 ]]
}
_is_flagq ()
{
local x;
for x in ${!1};
do
[[ ${x} == $2 ]] && return 0;
done;
return 1
}
append-cppflags ()
{
[[ -z $* ]] && return 0;
export CPPFLAGS="${CPPFLAGS} $*";
return 0
}
append-cxxflags ()
{
[[ -z $* ]] && return 0;
export CXXFLAGS="${CXXFLAGS} $*";
return 0
}
append-fflags ()
{
[[ -z $* ]] && return 0;
export FFLAGS="${FFLAGS} $*";
export FCFLAGS="${FCFLAGS} $*";
return 0
}
append-flags ()
{
[[ -z $* ]] && return 0;
export CFLAGS="${CFLAGS} $*";
export CXXFLAGS="${CXXFLAGS} $*";
export FFLAGS="${FFLAGS} $*";
export FCFLAGS="${FCFLAGS} $*";
return 0
}
append-ldflags ()
{
[[ -z $* ]] && return 0;
local flag;
for flag in "$@";
do
[[ ${flag} == -l* ]] && ewarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS";
done;
export LDFLAGS="${LDFLAGS} $*";
return 0
}
append-lfs-flags ()
{
[[ -n $@ ]] && die "append-lfs-flags takes no arguments";
append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
}
autotools_check_macro ()
{
[[ -f configure.ac || -f configure.in ]] || return 0;
local macro;
for macro in "$@";
do
WANT_AUTOCONF="2.5" autoconf --trace="${macro}" 2> /dev/null;
done;
return 0
}
autotools_get_auxdir ()
{
local auxdir_scan_out;
auxdir_scan_out=$(autotools_check_macro "AC_CONFIG_AUX_DIR");
[[ -n ${auxdir_scan_out} ]] || return 0;
echo ${auxdir_scan_out} | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) {
if (match($0, /AC_CONFIG_AUX_DIR:(.*)$/, res))
print res[1]
}' | uniq;
return 0
}
autotools_get_subdirs ()
{
local subdirs_scan_out;
subdirs_scan_out=$(autotools_check_macro "AC_CONFIG_SUBDIRS");
[[ -n ${subdirs_scan_out} ]] || return 0;
echo "${subdirs_scan_out}" | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) {
if (match($0, /AC_CONFIG_SUBDIRS:(.*)$/, res))
print res[1]
}' | uniq;
return 0
}
autotools_run_tool ()
{
if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase";
fi;
local STDERR_TARGET="${T}/$$.out";
local ris;
printf "***** $1 *****\n***** $*\n\n" > "${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}";
ebegin "Running $@";
"$@" >> "${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}" 2>&1;
ris=$?;
eend ${ris};
if [[ ${ris} != 0 && ${NO_FAIL} != 1 ]]; then
echo;
eerror "Failed Running $1 !";
eerror;
eerror "Include in your bugreport the contents of:";
eerror;
eerror " ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}";
echo;
die "Failed Running $1 !";
fi
}
bindnow-flags ()
{
ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild"
}
built_with_use ()
{
local hidden="no";
if [[ $1 == "--hidden" ]]; then
hidden="yes";
shift;
fi;
local missing_action="die";
if [[ $1 == "--missing" ]]; then
missing_action=$2;
shift;
shift;
case ${missing_action} in
true | false | die)
;;
*)
die "unknown action '${missing_action}'"
;;
esac;
fi;
local opt=$1;
[[ ${opt:0:1} = "-" ]] && shift || opt="-a";
local PKG=$(best_version $1);
[[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
shift;
local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE;
local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE;
if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
case ${missing_action} in
true)
return 0
;;
false)
return 1
;;
die)
die "Unable to determine what USE flags $PKG was built with"
;;
esac;
fi;
if [[ ${hidden} == "no" ]]; then
local IUSE_BUILT=($(<"${IUSEFILE}"));
local expand;
for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
do
if [[ $1 == ${expand}_* ]]; then
expand="";
break;
fi;
done;
if [[ -n ${expand} ]]; then
if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
case ${missing_action} in
true)
return 0
;;
false)
return 1
;;
die)
die "$PKG does not actually support the $1 USE flag!"
;;
esac;
fi;
fi;
fi;
local USE_BUILT=$(<${USEFILE});
while [[ $# -gt 0 ]]; do
if [[ ${opt} = "-o" ]]; then
has $1 ${USE_BUILT} && return 0;
else
has $1 ${USE_BUILT} || return 1;
fi;
shift;
done;
[[ ${opt} = "-a" ]]
}
cdrom_get_cds ()
{
local cdcnt=0;
local f=;
for f in "$@";
do
((++cdcnt));
export CDROM_CHECK_${cdcnt}="$f";
done;
export CDROM_TOTAL_CDS=${cdcnt};
export CDROM_CURRENT_CD=1;
if [[ -n ${CD_ROOT}${CD_ROOT_1} ]]; then
local var=;
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
var="CD_ROOT_${cdcnt}";
[[ -z ${!var} ]] && var="CD_ROOT";
if [[ -z ${!var} ]]; then
eerror "You must either use just the CD_ROOT";
eerror "or specify ALL the CD_ROOT_X variables.";
eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables.";
die "could not locate CD_ROOT_${cdcnt}";
fi;
done;
export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}};
einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}";
export CDROM_SET=-1;
for f in ${CDROM_CHECK_1//:/ };
do
((++CDROM_SET));
[[ -e ${CD_ROOT}/${f} ]] && break;
done;
export CDROM_MATCH=${f};
return;
fi;
if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}";
echo;
einfo "If you do not have the CD, but have the data files";
einfo "mounted somewhere on your filesystem, just export";
einfo "the variable CD_ROOT so that it points to the";
einfo "directory containing the files.";
echo;
einfo "For example:";
einfo "export CD_ROOT=/mnt/cdrom";
echo;
else
if [[ -n ${CDROM_NAME_SET} ]]; then
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}";
done;
fi;
einfo "This package will need access to ${CDROM_TOTAL_CDS} cds.";
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
var="CDROM_NAME_${cdcnt}";
[[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}";
done;
echo;
einfo "If you do not have the CDs, but have the data files";
einfo "mounted somewhere on your filesystem, just export";
einfo "the following variables so they point to the right place:";
einfon "";
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
echo -n " CD_ROOT_${cdcnt}";
done;
echo;
einfo "Or, if you have all the files in the same place, or";
einfo "you only have one cdrom, you can export CD_ROOT";
einfo "and that place will be used as the same data source";
einfo "for all the CDs.";
echo;
einfo "For example:";
einfo "export CD_ROOT_1=/mnt/cdrom";
echo;
fi;
export CDROM_SET="";
export CDROM_CURRENT_CD=0;
cdrom_load_next_cd
}
cdrom_load_next_cd ()
{
local var;
((++CDROM_CURRENT_CD));
unset CDROM_ROOT;
var=CD_ROOT_${CDROM_CURRENT_CD};
[[ -z ${!var} ]] && var="CD_ROOT";
if [[ -z ${!var} ]]; then
var="CDROM_CHECK_${CDROM_CURRENT_CD}";
_cdrom_locate_file_on_cd ${!var};
else
export CDROM_ROOT=${!var};
fi;
einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
}
check_extra_config ()
{
local config negate die error reworkmodulenames;
local soft_errors_count=0 hard_errors_count=0 config_required=0;
get_version;
for config in ${CONFIG_CHECK};
do
if [[ "${config:0:1}" != "~" ]]; then
config_required=1;
break;
fi;
done;
if [[ ${config_required} == 0 ]]; then
if ! linux_config_exists; then
return 0;
fi;
else
require_configured_kernel;
fi;
einfo "Checking for suitable kernel configuration options...";
for config in ${CONFIG_CHECK};
do
die=1;
error=0;
negate=0;
reworkmodulenames=0;
if [[ ${config:0:1} == "~" ]]; then
die=0;
config=${config:1};
else
if [[ ${config:0:1} == "@" ]]; then
die=0;
reworkmodulenames=1;
config=${config:1};
fi;
fi;
if [[ ${config:0:1} == "!" ]]; then
negate=1;
config=${config:1};
fi;
if [[ ${negate} == 1 ]]; then
linux_chkconfig_present ${config} && error=2;
else
if [[ ${reworkmodulenames} == 1 ]]; then
local temp_config="${config//*:}" i n;
config="${config//:*}";
if linux_chkconfig_present ${config}; then
for i in ${MODULE_NAMES};
do
n="${i//${temp_config}}";
[[ -z ${n//\(*} ]] && MODULE_IGNORE="${MODULE_IGNORE} ${temp_config}";
done;
error=2;
fi;
else
linux_chkconfig_present ${config} || error=1;
fi;
fi;
if [[ ${error} > 0 ]]; then
local report_func="eerror" local_error;
local_error="ERROR_${config}";
local_error="${!local_error}";
if [[ -z "${local_error}" ]]; then
local_error="${config}_ERROR";
local_error="${!local_error}";
fi;
if [[ ${die} == 0 && -z "${local_error}" ]]; then
local_error="WARNING_${config}";
local_error="${!local_error}";
if [[ -n "${local_error}" ]]; then
report_func="ewarn";
fi;
fi;
if [[ -z "${local_error}" ]]; then
[[ ${error} == 1 ]] && local_error="is not set when it should be." || local_error="should not be set. But it is.";
local_error="CONFIG_${config}:\t ${local_error}";
fi;
if [[ ${die} == 0 ]]; then
${report_func} " ${local_error}";
soft_errors_count=$[soft_errors_count + 1];
else
${report_func} " ${local_error}";
hard_errors_count=$[hard_errors_count + 1];
fi;
fi;
done;
if [[ ${hard_errors_count} > 0 ]]; then
eerror "Please check to make sure these options are set correctly.";
eerror "Failure to do so may cause unexpected problems.";
eerror "Once you have satisfied these options, please try merging";
eerror "this package again.";
die "Incorrect kernel configuration options";
else
if [[ ${soft_errors_count} > 0 ]]; then
ewarn "Please check to make sure these options are set correctly.";
ewarn "Failure to do so may cause unexpected problems.";
else
eend 0;
fi;
fi
}
check_kernel_built ()
{
require_configured_kernel;
get_version;
if [ ! -f "${KV_OUT_DIR}/include/linux/version.h" ]; then
eerror "These sources have not yet been prepared.";
eerror "We cannot build against an unprepared tree.";
eerror "To resolve this, please type the following:";
eerror;
eerror "# cd ${KV_DIR}";
eerror "# make oldconfig";
eerror "# make modules_prepare";
eerror;
eerror "Then please try merging this module again.";
die "Kernel sources need compiling first";
fi
}
check_license ()
{
local lic=$1;
if [ -z "${lic}" ]; then
lic="${PORTDIR}/licenses/${LICENSE}";
else
if [ -e "${PORTDIR}/licenses/${lic}" ]; then
lic="${PORTDIR}/licenses/${lic}";
else
if [ -e "${PWD}/${lic}" ]; then
lic="${PWD}/${lic}";
else
if [ -e "${lic}" ]; then
lic="${lic}";
fi;
fi;
fi;
fi;
[ ! -f "${lic}" ] && die "Could not find requested license ${lic}";
local l="`basename ${lic}`";
local shopts=$-;
local alic;
set -o noglob;
for alic in ${ACCEPT_LICENSE};
do
if [[ ${alic} == ${l} ]]; then
set +o noglob;
set -${shopts};
return 0;
fi;
done;
set +o noglob;
set -$shopts;
local licmsg=$(emktemp);
cat > ${licmsg} <<-EOF
**********************************************************
The following license outlines the terms of use of this
package. You MUST accept this license for installation to
continue. When you are done viewing, hit 'q'. If you
CTRL+C out of this, the install will not run!
**********************************************************
EOF
cat ${lic} >> ${licmsg};
${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}";
einfon "Do you accept the terms of this license (${l})? [yes/no] ";
read alic;
case ${alic} in
yes | Yes | y | Y)
return 0
;;
*)
echo;
echo;
echo;
eerror "You MUST accept the license to continue! Exiting!";
die "Failed to accept license"
;;
esac
}
check_modules_supported ()
{
require_configured_kernel;
get_version;
if ! linux_chkconfig_builtin "MODULES"; then
eerror "These sources do not support loading external modules.";
eerror "to be able to use this module please enable \"Loadable modules support\"";
eerror "in your kernel, recompile and then try merging this module again.";
die "No support for external modules in ${KV_FULL} config";
fi
}
check_vermagic ()
{
debug-print-function ${FUNCNAME} $*;
local curr_gcc_ver=$(gcc -dumpversion);
local tmpfile old_chost old_gcc_ver result=0;
tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit`;
tmpfile=${tmpfile//*usr/lib};
tmpfile=${tmpfile//\/include*};
old_chost=${tmpfile//*gcc\/};
old_chost=${old_chost//\/*};
old_gcc_ver=${tmpfile//*\/};
if [[ -z ${old_gcc_ver} || -z ${old_chost} ]]; then
ewarn "";
ewarn "Unable to detect what version of GCC was used to compile";
ewarn "the kernel. Build will continue, but you may experience problems.";
else
if [[ ${curr_gcc_ver} != ${old_gcc_ver} ]]; then
ewarn "";
ewarn "The version of GCC you are using (${curr_gcc_ver}) does";
ewarn "not match the version of GCC used to compile the";
ewarn "kernel (${old_gcc_ver}).";
result=1;
else
if [[ ${CHOST} != ${old_chost} ]]; then
ewarn "";
ewarn "The current CHOST (${CHOST}) does not match the chost";
ewarn "used when compiling the kernel (${old_chost}).";
result=1;
fi;
fi;
fi;
if [[ ${result} -gt 0 ]]; then
ewarn "";
ewarn "Build will not continue, because you will experience problems.";
ewarn "To fix this either change the version of GCC you wish to use";
ewarn "to match the kernel, or recompile the kernel first.";
die "GCC Version Mismatch.";
fi
}
check_zlibinflate ()
{
require_configured_kernel;
get_version;
local INFLATE;
local DEFLATE;
einfo "Determining the usability of ZLIB_INFLATE support in your kernel";
ebegin "checking ZLIB_INFLATE";
getfilevar_isbuiltin CONFIG_ZLIB_INFLATE ${KV_DIR}/.config;
eend $?;
[ "$?" != 0 ] && die;
ebegin "checking ZLIB_DEFLATE";
getfilevar_isbuiltin CONFIG_ZLIB_DEFLATE ${KV_DIR}/.config;
eend $?;
[ "$?" != 0 ] && die;
local LINENO_START;
local LINENO_END;
local SYMBOLS;
local x;
LINENO_END="$(grep -n 'CONFIG_ZLIB_INFLATE y' ${KV_DIR}/lib/Config.in | cut -d : -f 1)";
LINENO_START="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | grep -n 'if \[' | tail -n 1 | cut -d : -f 1)";
(( LINENO_AMOUNT = $LINENO_END - $LINENO_START ));
(( LINENO_END = $LINENO_END - 1 ));
SYMBOLS="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | tail -n $LINENO_AMOUNT | sed -e 's/^.*\(CONFIG_[^\" ]*\).*/\1/g;')";
for x in $SYMBOLS;
do
if [ "${!x}" = "y" ]; then
einfo "${x} ensures zlib is linked into your kernel - excellent";
return 0;
fi;
done;
eerror;
eerror "This kernel module requires ZLIB library support.";
eerror "You have enabled zlib support in your kernel, but haven't enabled";
eerror "enabled any option that will ensure that zlib is linked into your";
eerror "kernel.";
eerror;
eerror "Please ensure that you enable at least one of these options:";
eerror;
for x in $SYMBOLS;
do
eerror " * $x";
done;
eerror;
eerror "Please remember to recompile and install your kernel, and reboot";
eerror "into your new kernel before attempting to load this kernel module.";
die "Kernel doesn't include zlib support"
}
convert_to_m ()
{
debug-print-function ${FUNCNAME} $*;
if use_m; then
[ ! -f "${1}" ] && die "convert_to_m() requires a filename as an argument";
ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS=";
sed -i 's:SUBDIRS=:M=:g' ${1};
eend $?;
fi
}
create_ml_includes ()
{
local dest=$1;
shift;
local basedirs=$(create_ml_includes-listdirs "$@");
create_ml_includes-makedestdirs ${dest} ${basedirs};
local file;
for file in $(create_ml_includes-allfiles ${basedirs});
do
( echo "/* Autogenerated by create_ml_includes() in multilib.eclass */";
local dir;
for dir in ${basedirs};
do
if [[ -f ${D}/${dir}/${file} ]]; then
echo "";
local sym=$(create_ml_includes-sym_for_dir ${dir} "$@");
if [[ ${sym/=} != "${sym}" ]]; then
echo "#if ${sym}";
else
if [[ ${sym::1} == "!" ]]; then
echo "#ifndef ${sym:1}";
else
echo "#ifdef ${sym}";
fi;
fi;
echo "# include <$(create_ml_includes-absolute ${dir}/${file})>";
echo "#endif /* ${sym} */";
fi;
done ) > "${D}/${dest}/${file}";
done
}
create_ml_includes-absolute ()
{
local dst="$(create_ml_includes-tidy_path $1)";
dst=(${dst//\// });
local i;
for ((i=0; i<${#dst[*]}; i++))
do
[ "${dst[i]}" == "include" ] && break;
done;
local strip_upto=$i;
for ((i=strip_upto+1; i<${#dst[*]}-1; i++))
do
echo -n ${dst[i]}/;
done;
echo -n ${dst[i]}
}
create_ml_includes-allfiles ()
{
local basedir file;
for basedir in "$@";
do
for file in $(find "${D}"/${basedir} -type f);
do
echo ${file/${D}\/${basedir}\//};
done;
done | sort | uniq
}
create_ml_includes-listdirs ()
{
local dirs;
local data;
for data in "$@";
do
dirs="${dirs} ${data/*:/}";
done;
echo ${dirs:1}
}
create_ml_includes-makedestdirs ()
{
local dest=$1;
shift;
local basedirs=$@;
dodir ${dest};
local basedir;
for basedir in ${basedirs};
do
local dir;
for dir in $(find ${D}/${basedir} -type d);
do
dodir ${dest}/${dir/${D}\/${basedir}/};
done;
done
}
create_ml_includes-sym_for_dir ()
{
local dir=$1;
shift;
local data;
for data in "$@";
do
if [[ ${data} == *:${dir} ]]; then
echo ${data/:*/};
return 0;
fi;
done;
echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@";
exit 1
}
create_ml_includes-tidy_path ()
{
local removed=$1;
if [ -n "${removed}" ]; then
while [ "${removed}" != "${removed/\/\//\/}" ]; do
removed=${removed/\/\//\/};
done;
while [ "${removed}" != "${removed//\/.\//\/}" ]; do
removed=${removed//\/.\//\/};
done;
[ "${removed##*/}" = "." ] && removed=${removed%/*};
while [ "${removed}" != "${removed//\/..\/}" ]; do
local p1="${removed%%\/..\/*}";
local p2="${removed#*\/..\/}";
removed="${p1%\/*}/${p2}";
done;
[ "${removed##*/}" = ".." ] && removed=${removed%/*/*};
[ "${removed##*/}" = "" ] && removed=${removed%/*};
echo ${removed};
fi
}
darwintoolize ()
{
ewarn "darwintoolize() is deprecated, please just use elibtoolize()!";
elibtoolize
}
delete_all_version_separators ()
{
__versionator_shopt_toggle on;
replace_all_version_separators "" "${1}";
__versionator_shopt_toggle off
}
delete_version_separator ()
{
__versionator_shopt_toggle on;
replace_version_separator "${1}" "" "${2}";
__versionator_shopt_toggle off
}
dlopen_lib ()
{
if [[ ${ELIBC} != *BSD ]]; then
echo "-ldl";
fi
}
doicon ()
{
( local i j ret;
insinto /usr/share/pixmaps;
for i in "$@";
do
if [[ -f ${i} ]]; then
doins "${i}";
((ret+=$?));
else
if [[ -d ${i} ]]; then
for j in "${i}"/*.png;
do
doins "${j}";
((ret+=$?));
done;
else
((++ret));
fi;
fi;
done;
exit ${ret} )
}
domenu ()
{
( local i j ret=0;
insinto /usr/share/applications;
for i in "$@";
do
if [[ -f ${i} ]]; then
doins "${i}";
((ret+=$?));
else
if [[ -d ${i} ]]; then
for j in "${i}"/*.desktop;
do
doins "${j}";
((ret+=$?));
done;
else
((++ret));
fi;
fi;
done;
exit ${ret} )
}
eaclocal ()
{
local aclocal_opts;
local amflags_file;
for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in;
do
[[ -e ${amflags_file} ]] || continue;
aclocal_opts=$(sed -n '/^ACLOCAL_AMFLAGS[[:space:]]*=/s:[^=]*=::p' ${amflags_file});
eval aclocal_opts=\"${aclocal_opts}\";
break;
done;
if [[ -n ${AT_M4DIR} ]]; then
for x in ${AT_M4DIR};
do
case "${x}" in
"-I")
;;
*)
[[ ! -d ${x} ]] && ewarn "eaclocal: '${x}' does not exist";
aclocal_opts="${aclocal_opts} -I ${x}"
;;
esac;
done;
fi;
[[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && autotools_run_tool aclocal "$@" ${aclocal_opts}
}
eautoconf ()
{
if [[ ! -f configure.ac && ! -f configure.in ]]; then
echo;
eerror "No configure.{ac,in} present in '$(pwd | sed -e 's:.*/::')'!";
echo;
die "No configure.{ac,in} present!";
fi;
autotools_run_tool autoconf "$@"
}
eautoheader ()
{
[[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0;
NO_FAIL=1 autotools_run_tool autoheader "$@"
}
eautomake ()
{
local extra_opts;
local makefile_name;
if [[ -f GNUmakefile.am ]]; then
makefile_name="GNUmakefile";
else
if [[ -f Makefile.am ]]; then
makefile_name="Makefile";
else
return 0;
fi;
fi;
if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name}.in ]]; then
local used_automake;
local installed_automake;
installed_automake=$(automake --version | head -n 1 | sed -e 's:.*(GNU automake) ::');
used_automake=$(head -n 1 < ${makefile_name}.in | sed -e 's:.*by automake \(.*\) from .*:\1:');
if [[ ${installed_automake} != ${used_automake} ]]; then
einfo "Automake used for the package (${used_automake}) differs from";
einfo "the installed version (${installed_automake}).";
eautoreconf;
return 0;
fi;
fi;
[[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS ]] || extra_opts="${extra_opts} --foreign";
autotools_run_tool automake --add-missing --copy ${extra_opts} "$@"
}
eautoreconf ()
{
local pwd=$(pwd) x auxdir;
if [[ -z ${AT_NO_RECURSIVE} ]]; then
for x in $(autotools_get_subdirs);
do
if [[ -d ${x} ]]; then
cd "${x}";
AT_NOELIBTOOLIZE="yes" eautoreconf;
cd "${pwd}";
fi;
done;
fi;
auxdir=$(autotools_get_auxdir);
einfo "Running eautoreconf in '$(pwd)' ...";
[[ -n ${auxdir} ]] && mkdir -p ${auxdir};
eaclocal;
if ${LIBTOOLIZE:-libtoolize} -n --install >&/dev/null; then
_elibtoolize --copy --force --install;
else
_elibtoolize --copy --force;
fi;
eautoconf;
eautoheader;
FROM_EAUTORECONF="yes" eautomake ${AM_OPTS};
[[ ${AT_NOELIBTOOLIZE} == "yes" ]] && return 0;
elibtoolize;
return 0
}
ebeep ()
{
local n;
if [[ -z ${EBEEP_IGNORE} ]]; then
for ((n=1 ; n <= ${1:-5} ; n++))
do
echo -ne "\a";
sleep 0.1 >&/dev/null;
sleep 0,1 >&/dev/null;
echo -ne "\a";
sleep 1;
done;
fi
}
ecvs_clean ()
{
[[ -z $* ]] && set -- .;
find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
}
edos2unix ()
{
echo "$@" | xargs sed -i 's/\r$//'
}
egetent ()
{
case ${CHOST} in
*-darwin*)
case "$2" in
*[!0-9]*)
nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
;;
*)
nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
;;
esac
;;
*-freebsd* | *-dragonfly*)
local opts action="user";
[[ $1 == "passwd" ]] || action="group";
if [[ $2 == [[:digit:]]* ]]; then
[[ ${action} == "user" ]] && opts="-u" || opts="-g";
fi;
pw show ${action} ${opts} "$2" -q
;;
*-netbsd* | *-openbsd*)
grep "$2:\*:" /etc/$1
;;
*)
type -p nscd >&/dev/null && nscd -i "$1";
getent "$1" "$2"
;;
esac
}
egethome ()
{
ent=$(egetent passwd $1);
case ${CHOST} in
*-darwin* | *-freebsd* | *-dragonfly*)
echo ${ent} | cut -d: -f9
;;
*)
echo ${ent} | cut -d: -f6
;;
esac
}
egetshell ()
{
ent=$(egetent passwd "$1");
case ${CHOST} in
*-darwin* | *-freebsd* | *-dragonfly*)
echo ${ent} | cut -d: -f10
;;
*)
echo ${ent} cut -d: -f7
;;
esac
}
elibtoolize ()
{
local x=;
local y=;
local do_portage="no";
local do_reversedeps="no";
local do_only_patches="no";
local do_uclibc="yes";
local deptoremove=;
local my_dirlist=;
local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp";
local start_dir=${PWD};
my_dirlist=$(ELT_find_ltmain_sh);
for x in "$@";
do
case "${x}" in
"--portage")
do_portage="yes"
;;
"--reverse-deps")
do_reversedeps="yes";
elt_patches="${elt_patches} fix-relink"
;;
"--patch-only")
do_only_patches="yes"
;;
"^--remove-internal-dep="*)
deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||');
[[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep"
;;
"--shallow")
if [[ -f ${S}/ltmain.sh ]]; then
my_dirlist=${S};
else
my_dirlist=;
fi
;;
"--no-uclibc")
do_uclibc="no"
;;
*)
eerror "Invalid elibtoolize option: ${x}";
die "elibtoolize called with ${x} ??"
;;
esac;
done;
[[ ${do_uclibc} == "yes" ]] && elt_patches="${elt_patches} uclibc-conf uclibc-ltconf";
[[ ${CHOST} == *"-freebsd"* ]] && elt_patches="${elt_patches} fbsd-conf fbsd-ltconf";
[[ ${CHOST} == *"-darwin"* ]] && elt_patches="${elt_patches} darwin-ltconf darwin-ltmain";
for x in ${my_dirlist};
do
local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||");
export ELT_APPLIED_PATCHES=;
export ELT_LTMAIN_SH="${x}/ltmain.sh";
[[ -f ${x}/.elibtoolized ]] && continue;
cd ${x};
einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')";
for y in ${elt_patches};
do
local ret=0;
case "${y}" in
"portage")
if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?;
fi
;;
"rem-int-dep")
ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}";
ret=$?
;;
"fix-relink")
if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]]; then
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?;
fi
;;
"max_cmd_len")
if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]]; then
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?;
fi
;;
"uclibc-conf")
if [[ -e ${x}/configure && -n $(grep 'Transform linux' "${x}/configure") ]]; then
ELT_walk_patches "${x}/configure" "${y}";
ret=$?;
else
if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'Transform linux' "${x}/../configure") ]]; then
ELT_walk_patches "${x}/../configure" "${y}";
ret=$?;
fi;
fi
;;
"uclibc-ltconf")
if [[ -s ${x}/ltconfig ]]; then
ELT_walk_patches "${x}/ltconfig" "${y}";
ret=$?;
fi
;;
"fbsd-conf")
if [[ -e ${x}/configure && -n $(grep 'version_type=freebsd-' "${x}/configure") ]]; then
ELT_walk_patches "${x}/configure" "${y}";
ret=$?;
else
if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'version_type=freebsd-' "${x}/../configure") ]]; then
ELT_walk_patches "${x}/../configure" "${y}";
ret=$?;
fi;
fi
;;
"fbsd-ltconf")
if [[ -s ${x}/ltconfig ]]; then
ELT_walk_patches "${x}/ltconfig" "${y}";
ret=$?;
fi
;;
"darwin-ltconf")
if [[ -s ${x}/ltconfig ]]; then
ELT_walk_patches "${x}/ltconfig" "${y}";
ret=$?;
fi
;;
"install-sh")
ELT_walk_patches "${x}/install-sh" "${y}";
ret=$?
;;
*)
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?
;;
esac;
if [[ ${ret} -ne 0 ]]; then
case ${y} in
"relink")
local version=$(ELT_libtool_version "${x}/ltmain.sh");
if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
ewarn " Could not apply relink.patch!";
fi
;;
"portage")
if [[ ${do_portage} == "yes" ]]; then
if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
echo;
eerror "Portage patch requested, but failed to apply!";
eerror "Please bug azarah or vapier to add proper patch.";
die "Portage patch requested, but failed to apply!";
fi;
else
if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
:;
else
local version=$( eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); echo "${VERSION}");
echo;
eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
eerror "Please bug azarah or vapier to add proper patch.";
die "Portage patch failed to apply!";
fi;
ELT_APPLIED_PATCHES="portage";
fi
;;
"uclibc-"*)
[[ ${CHOST} == *"-uclibc" ]] && ewarn " uClibc patch set '${y}' failed to apply!"
;;
"fbsd-"*)
if [[ ${CHOST} == *"-freebsd"* ]]; then
if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
eerror " FreeBSD patch set '${y}' failed to apply!";
die "FreeBSD patch set '${y}' failed to apply!";
fi;
fi
;;
"darwin-"*)
[[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${y}' failed to apply!"
;;
esac;
fi;
done;
if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
ewarn "Cannot apply any patches, please file a bug about this";
die;
fi;
fi;
[[ -f ${x}/libtool ]] && rm -f "${x}/libtool";
>> "${x}/.elibtoolized";
done;
cd "${start_dir}"
}
emktemp ()
{
local exe="touch";
[[ $1 == -d ]] && exe="mkdir" && shift;
local topdir=$1;
if [[ -z ${topdir} ]]; then
[[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
fi;
if ! type -P mktemp > /dev/null; then
local tmp=/;
while [[ -e ${tmp} ]]; do
tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
done;
${exe} "${tmp}" || ${exe} -p "${tmp}";
echo "${tmp}";
else
if [[ ${exe} == "touch" ]]; then
TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
else
TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
fi;
fi
}
enewgroup ()
{
case ${EBUILD_PHASE} in
unpack | compile | test | install)
eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
eerror "Package fails at QA and at life. Please file a bug.";
die "Bad package! enewgroup is only for use in pkg_* functions!"
;;
esac;
local egroup="$1";
shift;
if [ -z "${egroup}" ]; then
eerror "No group specified !";
die "Cannot call enewgroup without a group";
fi;
if [[ -n $(egetent group "${egroup}") ]]; then
return 0;
fi;
einfo "Adding group '${egroup}' to your system ...";
local opts=;
local egid="$1";
shift;
if [ ! -z "${egid}" ]; then
if [ "${egid}" -gt 0 ]; then
if [ -z "`egetent group ${egid}`" ]; then
if [[ "${CHOST}" == *-darwin* ]]; then
opts="${opts} ${egid}";
else
opts="${opts} -g ${egid}";
fi;
else
egid="next available; requested gid taken";
fi;
else
eerror "Groupid given but is not greater than 0 !";
die "${egid} is not a valid GID";
fi;
else
egid="next available";
fi;
einfo " - Groupid: ${egid}";
local eextra="$@";
opts="${opts} ${eextra}";
local oldsandbox="${SANDBOX_ON}";
export SANDBOX_ON="0";
case ${CHOST} in
*-darwin*)
if [ ! -z "${eextra}" ]; then
einfo "Extra options are not supported on Darwin/OS X yet";
einfo "Please report the ebuild along with the info below";
einfo "eextra: ${eextra}";
die "Required function missing";
fi;
case ${egid} in
*[!0-9]*)
for ((egid = 101; egid <= 999; egid++))
do
[[ -z $(egetent group ${egid}) ]] && break;
done
;;
esac;
dscl . create /groups/${egroup} gid ${egid};
dscl . create /groups/${egroup} passwd '*'
;;
*-freebsd* | *-dragonfly*)
case ${egid} in
*[!0-9]*)
for ((egid = 101; egid <= 999; egid++))
do
[[ -z $(egetent group ${egid}) ]] && break;
done
;;
esac;
pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
;;
*-netbsd*)
case ${egid} in
*[!0-9]*)
for ((egid = 101; egid <= 999; egid++))
do
[[ -z $(egetent group ${egid}) ]] && break;
done
;;
esac;
groupadd -g ${egid} ${egroup} || die "enewgroup failed"
;;
*)
groupadd ${opts} ${egroup} || die "enewgroup failed"
;;
esac;
export SANDBOX_ON="${oldsandbox}"
}
enewuser ()
{
case ${EBUILD_PHASE} in
unpack | compile | test | install)
eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
eerror "Package fails at QA and at life. Please file a bug.";
die "Bad package! enewuser is only for use in pkg_* functions!"
;;
esac;
local euser=$1;
shift;
if [[ -z ${euser} ]]; then
eerror "No username specified !";
die "Cannot call enewuser without a username";
fi;
if [[ -n $(egetent passwd "${euser}") ]]; then
return 0;
fi;
einfo "Adding user '${euser}' to your system ...";
local opts=;
local euid=$1;
shift;
if [[ -n ${euid} && ${euid} != -1 ]]; then
if [[ ${euid} -gt 0 ]]; then
if [[ -n $(egetent passwd ${euid}) ]]; then
euid="next";
fi;
else
eerror "Userid given but is not greater than 0 !";
die "${euid} is not a valid UID";
fi;
else
euid="next";
fi;
if [[ ${euid} == "next" ]]; then
for ((euid = 101; euid <= 999; euid++))
do
[[ -z $(egetent passwd ${euid}) ]] && break;
done;
fi;
opts="${opts} -u ${euid}";
einfo " - Userid: ${euid}";
local eshell=$1;
shift;
if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then
if [[ ! -e ${ROOT}${eshell} ]]; then
eerror "A shell was specified but it does not exist !";
die "${eshell} does not exist in ${ROOT}";
fi;
if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then
eerror "Do not specify ${eshell} yourself, use -1";
die "Pass '-1' as the shell parameter";
fi;
else
for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null;
do
[[ -x ${ROOT}${shell} ]] && break;
done;
if [[ ${shell} == "/dev/null" ]]; then
eerror "Unable to identify the shell to use, proceeding with userland default.";
case ${USERLAND} in
GNU)
shell="/bin/false"
;;
BSD)
shell="/sbin/nologin"
;;
Darwin)
shell="/usr/sbin/nologin"
;;
*)
die "Unable to identify the default shell for userland ${USERLAND}"
;;
esac;
fi;
eshell=${shell};
fi;
einfo " - Shell: ${eshell}";
opts="${opts} -s ${eshell}";
local ehome=$1;
shift;
if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then
ehome="/dev/null";
fi;
einfo " - Home: ${ehome}";
opts="${opts} -d ${ehome}";
local egroups=$1;
shift;
if [[ ! -z ${egroups} ]]; then
local oldifs=${IFS};
local defgroup="" exgroups="";
export IFS=",";
for g in ${egroups};
do
export IFS=${oldifs};
if [[ -z $(egetent group "${g}") ]]; then
eerror "You must add group ${g} to the system first";
die "${g} is not a valid GID";
fi;
if [[ -z ${defgroup} ]]; then
defgroup=${g};
else
exgroups="${exgroups},${g}";
fi;
export IFS=",";
done;
export IFS=${oldifs};
opts="${opts} -g ${defgroup}";
if [[ ! -z ${exgroups} ]]; then
opts="${opts} -G ${exgroups:1}";
fi;
else
egroups="(none)";
fi;
einfo " - Groups: ${egroups}";
local oldsandbox=${SANDBOX_ON};
export SANDBOX_ON="0";
case ${CHOST} in
*-darwin*)
if [[ -z $@ ]]; then
dscl . create /users/${euser} uid ${euid};
dscl . create /users/${euser} shell ${eshell};
dscl . create /users/${euser} home ${ehome};
dscl . create /users/${euser} realname "added by portage for ${PN}";
local oldifs=${IFS};
export IFS=",";
for g in ${egroups};
do
dscl . merge /groups/${g} users ${euser};
done;
export IFS=${oldifs};
else
einfo "Extra options are not supported on Darwin yet";
einfo "Please report the ebuild along with the info below";
einfo "eextra: $@";
die "Required function missing";
fi
;;
*-freebsd* | *-dragonfly*)
if [[ -z $@ ]]; then
pw useradd ${euser} ${opts} -c "added by portage for ${PN}" die "enewuser failed";
else
einfo " - Extra: $@";
pw useradd ${euser} ${opts} "$@" || die "enewuser failed";
fi
;;
*-netbsd*)
if [[ -z $@ ]]; then
useradd ${opts} ${euser} || die "enewuser failed";
else
einfo " - Extra: $@";
useradd ${opts} ${euser} "$@" || die "enewuser failed";
fi
;;
*-openbsd*)
if [[ -z $@ ]]; then
useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} || die "enewuser failed";
else
einfo " - Extra: $@";
useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} "$@" || die "enewuser failed";
fi
;;
*)
if [[ -z $@ ]]; then
useradd ${opts} ${euser} -c "added by portage for ${PN}" || die "enewuser failed";
else
einfo " - Extra: $@";
useradd ${opts} ${euser} "$@" || die "enewuser failed";
fi
;;
esac;
if [[ ! -e ${ROOT}/${ehome} ]]; then
einfo " - Creating ${ehome} in ${ROOT}";
mkdir -p "${ROOT}/${ehome}";
chown ${euser} "${ROOT}/${ehome}";
chmod 755 "${ROOT}/${ehome}";
fi;
export SANDBOX_ON=${oldsandbox}
}
epatch ()
{
function _epatch_draw_line ()
{
[[ -z $1 ]] && set "$(printf "%65s" '')";
echo "${1//?/=}"
};
function _epatch_assert ()
{
local _pipestatus=${PIPESTATUS[*]};
[[ ${_pipestatus// /} -eq 0 ]]
};
local PIPE_CMD="";
local STDERR_TARGET="${T}/$$.out";
local PATCH_TARGET="${T}/$$.patch";
local PATCH_SUFFIX="";
local SINGLE_PATCH="no";
local x="";
unset P4CONFIG P4PORT P4USER;
if [ "$#" -gt 1 ]; then
local m="";
for m in "$@";
do
epatch "${m}";
done;
return 0;
fi;
if [ -n "$1" -a -f "$1" ]; then
SINGLE_PATCH="yes";
local EPATCH_SOURCE="$1";
local EPATCH_SUFFIX="${1##*\.}";
else
if [ -n "$1" -a -d "$1" ]; then
if [ "${EPATCH_FORCE}" = "yes" ] && [ -z "${EPATCH_SUFFIX}" ]; then
local EPATCH_SOURCE="$1/*";
else
local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}";
fi;
else
if [[ ! -d ${EPATCH_SOURCE} ]] || [[ -n $1 ]]; then
if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]; then
EPATCH_SOURCE="$1";
fi;
echo;
eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:";
eerror;
eerror " ${EPATCH_SOURCE}";
eerror " ( ${EPATCH_SOURCE##*/} )";
echo;
die "Cannot find \$EPATCH_SOURCE!";
fi;
local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}";
fi;
fi;
case ${EPATCH_SUFFIX##*\.} in
lzma)
PIPE_CMD="lzma -dc";
PATCH_SUFFIX="lzma"
;;
bz2)
PIPE_CMD="bzip2 -dc";
PATCH_SUFFIX="bz2"
;;
gz | Z | z)
PIPE_CMD="gzip -dc";
PATCH_SUFFIX="gz"
;;
ZIP | zip)
PIPE_CMD="unzip -p";
PATCH_SUFFIX="zip"
;;
*)
PIPE_CMD="cat";
PATCH_SUFFIX="patch"
;;
esac;
if [ "${SINGLE_PATCH}" = "no" ]; then
einfo "${EPATCH_MULTI_MSG}";
fi;
for x in ${EPATCH_SOURCE};
do
if [ -f ${x} ] && ( [ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || [ "${EPATCH_FORCE}" = "yes" ] ); then
local count=0;
local popts="${EPATCH_OPTS}";
local patchname=${x##*/};
if [ -n "${EPATCH_EXCLUDE}" ]; then
if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]; then
continue;
fi;
fi;
if [ "${SINGLE_PATCH}" = "yes" ]; then
if [ -n "${EPATCH_SINGLE_MSG}" ]; then
einfo "${EPATCH_SINGLE_MSG}";
else
einfo "Applying ${patchname} ...";
fi;
else
einfo " ${patchname} ...";
fi;
echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
if [[ ${PATCH_SUFFIX} != "patch" ]]; then
echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
if ! ( ${PIPE_CMD} ${x} > ${PATCH_TARGET} ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then
echo;
eerror "Could not extract patch!";
count=5;
break;
fi;
else
PATCH_TARGET="${x}";
fi;
local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
if [[ -n ${abs_paths} ]]; then
count=1;
echo "NOTE: skipping -p0 due to absolute paths in patch:" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo "${abs_paths}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
fi;
while [ "${count}" -lt 5 ]; do
_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
if ( cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f;
_epatch_assert ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then
_epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1;
_epatch_assert;
if [ "$?" -ne 0 ]; then
cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo;
eerror "A dry-run of patch command succeeded, but actually";
eerror "applying the patch failed!";
count=5;
fi;
rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
break;
fi;
count=$((count + 1));
done;
if [ "${PATCH_SUFFIX}" != "patch" ]; then
rm -f ${PATCH_TARGET};
fi;
if [ "${count}" -eq 5 ]; then
echo;
eerror "Failed Patch: ${patchname} !";
eerror " ( ${PATCH_TARGET} )";
eerror;
eerror "Include in your bugreport the contents of:";
eerror;
eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}";
echo;
die "Failed Patch: ${patchname}!";
fi;
rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
eend 0;
fi;
done;
if [ "${SINGLE_PATCH}" = "no" ]; then
einfo "Done with patching";
fi
}
epause ()
{
[[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5}
}
epunt_cxx ()
{
local dir=$1;
[[ -z ${dir} ]] && dir=${S};
ebegin "Removing useless C++ checks";
local f;
find "${dir}" -name configure | while read f; do
patch --no-backup-if-mismatch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null;
done;
eend 0
}
esvn_clean ()
{
[[ -z $* ]] && set -- .;
find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
}
filter-flags ()
{
_filter-hardened "$@";
_filter-var CFLAGS "$@";
_filter-var CPPFLAGS "$@";
_filter-var CXXFLAGS "$@";
_filter-var FFLAGS "$@";
_filter-var FCFLAGS "$@";
return 0
}
filter-ldflags ()
{
_filter-var LDFLAGS "$@";
return 0
}
filter-lfs-flags ()
{
[[ -n $@ ]] && die "filter-lfs-flags takes no arguments";
filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
}
filter-mfpmath ()
{
local orig_mfpmath new_math prune_math;
orig_mfpmath=$(get-flag -mfpmath);
new_math=$(get-flag mfpmath);
new_math=" ${new_math//,/ } ";
prune_math="";
for prune_math in "$@";
do
new_math=${new_math/ ${prune_math} / };
done;
new_math=$(echo ${new_math});
new_math=${new_math// /,};
if [[ -z ${new_math} ]]; then
filter-flags ${orig_mfpmath};
else
replace-flags ${orig_mfpmath} -mfpmath=${new_math};
fi;
return 0
}
find_module_params ()
{
debug-print-function ${FUNCNAME} $*;
local matched_offset=0 matched_opts=0 test="${@}" temp_var result;
local i=0 y=0 z=0;
for ((i=0; i<=${#test}; i++))
do
case ${test:${i}:1} in
\()
matched_offset[0]=${i}
;;
\:)
matched_opts=$((${matched_opts} + 1));
matched_offset[${matched_opts}]="${i}"
;;
\))
matched_opts=$((${matched_opts} + 1));
matched_offset[${matched_opts}]="${i}"
;;
esac;
done;
for ((i=0; i<=${matched_opts}; i++))
do
case ${i} in
0)
tempvar=${test:0:${matched_offset[0]}}
;;
*)
y=$((${matched_offset[$((${i} - 1))]} + 1));
z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]}));
z=$((${z} - 1));
tempvar=${test:${y}:${z}}
;;
esac;
case ${i} in
0)
result="${result} modulename:${tempvar}"
;;
1)
result="${result} libdir:${tempvar}"
;;
2)
result="${result} srcdir:${tempvar}"
;;
3)
result="${result} objdir:${tempvar}"
;;
esac;
done;
echo ${result}
}
find_unpackable_file ()
{
local src=$1;
if [[ -z ${src} ]]; then
src=${DISTDIR}/${A};
else
if [[ -e ${DISTDIR}/${src} ]]; then
src=${DISTDIR}/${src};
else
if [[ -e ${PWD}/${src} ]]; then
src=${PWD}/${src};
else
if [[ -e ${src} ]]; then
src=${src};
fi;
fi;
fi;
fi;
[[ ! -e ${src} ]] && return 1;
echo "${src}"
}
gcc-fullversion ()
{
$(tc-getCC "$@") -dumpversion
}
gcc-major-version ()
{
gcc-version "$@" | cut -f1 -d.
}
gcc-micro-version ()
{
gcc-fullversion "$@" | cut -f3 -d. | cut -f1 -d-
}
gcc-minor-version ()
{
gcc-version "$@" | cut -f2 -d.
}
gcc-specs-directive ()
{
local directive subdname subdirective;
directive="$(_gcc-specs-directive_raw $1)";
while [[ ${directive} == *%\(*\)* ]]; do
subdname=${directive/*%\(};
subdname=${subdname/\)*};
subdirective="$(_gcc-specs-directive_raw ${subdname})";
directive="${directive//\%(${subdname})/${subdirective}}";
done;
echo "${directive}";
return 0
}
gcc-specs-nostrict ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]])
}
gcc-specs-now ()
{
local directive;
directive=$(gcc-specs-directive link_command);
return $([[ "${directive/\{!nonow:}" != "${directive}" ]])
}
gcc-specs-pie ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!nopie:}" != "${directive}" ]])
}
gcc-specs-relro ()
{
local directive;
directive=$(gcc-specs-directive link_command);
return $([[ "${directive/\{!norelro:}" != "${directive}" ]])
}
gcc-specs-ssp ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]])
}
gcc-specs-ssp-to-all ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]])
}
gcc-version ()
{
gcc-fullversion "$@" | cut -f1,2 -d.
}
gen_usr_ldscript ()
{
local lib libdir=$(get_libdir) output_format="";
dodir /usr/${libdir};
output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
[[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
for lib in "$@";
do
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
cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
/* GNU ld script
Since Gentoo has critical dynamic libraries
in /lib, and the static versions in /usr/lib,
we need to have a "fake" dynamic lib in /usr/lib,
otherwise we run into linking problems.
See bug http://bugs.gentoo.org/4411 for more info.
*/
${output_format}
GROUP ( /${libdir}/${lib} )
END_LDSCRIPT
fi
fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
done
}
generate_modulesd ()
{
debug-print-function ${FUNCNAME} $*;
local currm_path currm currm_t t myIFS myVAR;
local module_docs module_enabled module_aliases module_additions module_examples module_modinfo module_opts;
for currm_path in ${@};
do
currm=${currm_path//*\/};
currm=$(echo ${currm} | tr '[:lower:]' '[:upper:]');
currm_t=${currm};
while [[ -z ${currm_t//*-*} ]]; do
currm_t=${currm_t/-/_};
done;
module_docs="$(eval echo \${MODULESD_${currm_t}_DOCS})";
module_enabled="$(eval echo \${MODULESD_${currm_t}_ENABLED})";
module_aliases="$(eval echo \${#MODULESD_${currm_t}_ALIASES[*]})";
module_additions="$(eval echo \${#MODULESD_${currm_t}_ADDITIONS[*]})";
module_examples="$(eval echo \${#MODULESD_${currm_t}_EXAMPLES[*]})";
[[ ${module_aliases} -eq 0 ]] && unset module_aliases;
[[ ${module_additions} -eq 0 ]] && unset module_additions;
[[ ${module_examples} -eq 0 ]] && unset module_examples;
[[ ${module_enabled} == no ]] && return 0;
for t in ${!module_*};
do
[[ -z ${!t} ]] && unset ${t};
done;
[[ -z ${!module_*} ]] && return 0;
module_modinfo="$(modinfo -p ${currm_path}.${KV_OBJ})";
module_config="${T}/modulesd-${currm}";
ebegin "Preparing file for modules.d";
echo "# modules.d configuration file for ${currm}" >> ${module_config};
[[ -n ${module_docs} ]] && echo "# For more information please read:" >> ${module_config};
for t in ${module_docs};
do
echo "# ${t//*\/}" >> ${module_config};
done;
echo >> ${module_config};
if [[ ${module_aliases} -gt 0 ]]; then
echo "# Internal Aliases - Do not edit" >> ${module_config};
echo "# ------------------------------" >> ${module_config};
for ((t=0; t<${module_aliases}; t++))
do
echo "alias $(eval echo \${MODULESD_${currm}_ALIASES[$t]})" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
if [[ -n ${module_modinfo} ]]; then
echo >> ${module_config};
echo "# Configurable module parameters" >> ${module_config};
echo "# ------------------------------" >> ${module_config};
myIFS="${IFS}";
IFS="$(echo -en "\n\b")";
for t in ${module_modinfo};
do
myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")";
if [[ -n ${myVAR} ]]; then
module_opts="${module_opts} ${t%%:*}:${myVAR}";
fi;
echo -e "# ${t%%:*}:\t${t#*:}" >> ${module_config};
done;
IFS="${myIFS}";
echo '' >> ${module_config};
fi;
if [[ $(eval echo \${MODULESD_${currm}_ALIASES[0]}) == guess ]]; then
if [[ -n ${module_opts} ]]; then
echo "# For Example..." >> ${module_config};
echo "# --------------" >> ${module_config};
for t in ${module_opts};
do
echo "# options ${currm} ${t//:*}=${t//*:}" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
else
if [[ ${module_examples} -gt 0 ]]; then
echo "# For Example..." >> ${module_config};
echo "# --------------" >> ${module_config};
for ((t=0; t<${module_examples}; t++))
do
echo "options $(eval echo \${MODULESD_${currm}_EXAMPLES[$t]})" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
fi;
if [[ ${module_additions} -gt 0 ]]; then
for ((t=0; t<${module_additions}; t++))
do
echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
if kernel_is ge 2 6; then
insinto /etc/modprobe.d;
else
insinto /etc/modules.d;
fi;
newins ${module_config} ${currm_path//*\/};
[[ -n ${module_docs} ]] && dodoc ${module_docs};
done;
eend 0;
return 0
}
get-KERNEL_CC ()
{
debug-print-function ${FUNCNAME} $*;
if [[ -n ${KERNEL_CC} ]]; then
echo "${KERNEL_CC}";
return;
fi;
local kernel_cc;
if [ -n "${KERNEL_ABI}" ]; then
kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))";
else
kernel_cc=$(tc-getCC);
fi;
echo "${kernel_cc}"
}
get-flag ()
{
local f findflag="$1";
for f in ${CFLAGS} ${CXXFLAGS} ${FFLAGS} ${FCFLAGS};
do
if [ "${f/${findflag}}" != "${f}" ]; then
printf "%s\n" "${f/-${findflag}=}";
return 0;
fi;
done;
return 1
}
get_abi_ASFLAGS ()
{
get_abi_var ASFLAGS "$@"
}
get_abi_CDEFINE ()
{
get_abi_var CDEFINE "$@"
}
get_abi_CFLAGS ()
{
get_abi_var CFLAGS "$@"
}
get_abi_CHOST ()
{
get_abi_var CHOST "$@"
}
get_abi_CTARGET ()
{
get_abi_var CTARGET "$@"
}
get_abi_FAKE_TARGETS ()
{
get_abi_var FAKE_TARGETS "$@"
}
get_abi_LDFLAGS ()
{
get_abi_var LDFLAGS "$@"
}
get_abi_LIBDIR ()
{
get_abi_var LIBDIR "$@"
}
get_abi_var ()
{
local flag=$1;
local abi;
if [ $# -gt 1 ]; then
abi=${2};
else
if [ -n "${ABI}" ]; then
abi=${ABI};
else
if [ -n "${DEFAULT_ABI}" ]; then
abi=${DEFAULT_ABI};
else
abi="default";
fi;
fi;
fi;
local var="${flag}_${abi}";
echo ${!var}
}
get_after_major_version ()
{
__versionator_shopt_toggle on;
echo $(get_version_component_range 2- "${1:-${PV}}" );
__versionator_shopt_toggle off
}
get_all_abis ()
{
local order="";
if [[ -z ${MULTILIB_ABIS} ]]; then
echo "default";
return 0;
fi;
for x in ${MULTILIB_ABIS};
do
if [[ ${x} != ${DEFAULT_ABI} ]]; then
order="${order:+${order} }${x}";
fi;
done;
order="${order:+${order} }${DEFAULT_ABI}";
echo ${order};
return 0
}
get_all_libdirs ()
{
local libdirs="lib";
local abi;
local dir;
for abi in ${MULTILIB_ABIS};
do
[ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})";
done;
echo "${libdirs}"
}
get_all_version_components ()
{
__versionator_shopt_toggle on;
local ver_str=${1:-${PV}} result result_idx=0;
result=();
if [[ "${VERSIONATOR_CACHE_VER_STR}" == "${ver_str}" ]]; then
echo ${VERSIONATOR_CACHE_RESULT};
__versionator_shopt_toggle off;
return;
fi;
export VERSIONATOR_CACHE_VER_STR="${ver_str}";
while [[ -n "$ver_str" ]]; do
case "${ver_str:0:1}" in
[[:digit:]])
result[$result_idx]="${ver_str%%[^[:digit:]]*}";
ver_str="${ver_str##+([[:digit:]])}";
result_idx=$(($result_idx + 1))
;;
[-_.])
result[$result_idx]="${ver_str:0:1}";
ver_str="${ver_str:1}";
result_idx=$(($result_idx + 1))
;;
[[:alpha:]])
local not_match="${ver_str##+([[:alpha:]])*([[:digit:]])}";
result[$result_idx]=${ver_str:0:$((${#ver_str} - ${#not_match}))};
ver_str="${not_match}";
result_idx=$(($result_idx + 1))
;;
*)
result[$result_idx]="${ver_str:0:1}";
ver_str="${ver_str:1}";
result_idx=$(($result_idx + 1))
;;
esac;
done;
export VERSIONATOR_CACHE_RESULT="${result[@]}";
echo ${result[@]};
__versionator_shopt_toggle off
}
get_bmake ()
{
if [[ ${USERLAND} == *BSD ]]; then
echo make;
else
if [[ ${USERLAND} == "Darwin" ]]; then
echo bsdmake;
else
echo pmake;
fi;
fi
}
get_install_abis ()
{
local order="";
if [[ -z ${MULTILIB_ABIS} ]]; then
echo "default";
return 0;
fi;
if [[ ${EMULTILIB_PKG} == "true" ]]; then
for x in ${MULTILIB_ABIS};
do
if [[ ${x} != "${DEFAULT_ABI}" ]]; then
hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}";
fi;
done;
hasq ${DEFAULT_ABI} ${ABI_DENY} || order="${ordera} ${DEFAULT_ABI}";
if [[ -n ${ABI_ALLOW} ]]; then
local ordera="";
for x in ${order};
do
if hasq ${x} ${ABI_ALLOW}; then
ordera="${ordera} ${x}";
fi;
done;
order=${ordera};
fi;
else
order=${DEFAULT_ABI};
fi;
if [[ -z ${order} ]]; then
die "The ABI list is empty. Are you using a proper multilib profile? Perhaps your USE flags or MULTILIB_ABIS are too restrictive for this package.";
fi;
echo ${order};
return 0
}
get_last_version_component_index ()
{
__versionator_shopt_toggle on;
echo $(( $(get_version_component_count "${1:-${PV}}" ) - 1 ));
__versionator_shopt_toggle off
}
get_libdir ()
{
local CONF_LIBDIR;
if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
echo ${CONF_LIBDIR_OVERRIDE};
else
get_abi_LIBDIR;
fi
}
get_libdir_override ()
{
if has_multilib_profile; then
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";
exit 1;
fi;
CONF_LIBDIR="$1";
CONF_LIBDIR_OVERRIDE="$1";
LIBDIR_default="$1"
}
get_libname ()
{
local libname;
local ver=$1;
case ${CHOST} in
*-cygwin | mingw* | *-mingw*)
libname="dll"
;;
*-darwin*)
libname="dylib"
;;
*)
libname="so"
;;
esac;
if [[ -z $* ]]; then
echo ".${libname}";
else
for ver in "$@";
do
case ${CHOST} in
*-darwin*)
echo ".${ver}.${libname}"
;;
*)
echo ".${libname}.${ver}"
;;
esac;
done;
fi
}
get_localversion ()
{
local lv_list i x;
for i in $(ls ${1}/localversion* 2>/dev/null);
do
[[ -n ${i//*~*} ]] && lv_list="${lv_list} ${i}";
done;
for i in ${lv_list};
do
x="${x}$(<${i})";
done;
x=${x/ /};
echo ${x}
}
get_major_version ()
{
__versionator_shopt_toggle on;
local c;
c=($(get_all_version_components "${1:-${PV}}" ));
echo ${c[0]};
__versionator_shopt_toggle off
}
get_ml_incdir ()
{
local dir=/usr/include;
if [[ $# -gt 0 ]]; then
incdir=$1;
shift;
fi;
if [[ -z "${MULTILIB_ABIS}" ]]; then
echo ${incdir};
return 0;
fi;
local abi=${ABI-${DEFAULT_ABI}};
if [[ $# -gt 0 ]]; then
abi=$1;
shift;
fi;
if [[ -d "${dir}/gentoo-multilib/${abi}" ]]; then
echo ${dir}/gentoo-multilib/${abi};
else
echo ${dir};
fi
}
get_mounts ()
{
local point= node= fs= opts= foo=;
if [[ $(uname -s) == "Linux" ]]; then
while read node point fs opts foo; do
echo "${point} ${node} ${fs} ${opts}";
done < /proc/mounts;
return;
fi;
local IFS=' ';
LC_ALL=C mount -p | while read node point fs foo; do
opts=${fs#* };
fs=${fs%% *};
echo "${point// /\040} ${node// /\040} ${fs%% *} ${opts// /\040}";
done
}
get_multilibdir ()
{
if has_multilib_profile; then
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";
exit 1;
fi;
echo ${CONF_MULTILIBDIR:=lib32}
}
get_running_version ()
{
KV_FULL=$(uname -r);
if [[ -f ${ROOT}/lib/modules/${KV_FULL}/source/Makefile ]]; then
KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/source);
unset KV_FULL;
get_version;
return $?;
else
if [[ -f ${ROOT}/lib/modules/${KV_FULL}/build/Makefile ]]; then
KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/build);
unset KV_FULL;
get_version;
return $?;
else
KV_MAJOR=$(get_version_component_range 1 ${KV_FULL});
KV_MINOR=$(get_version_component_range 2 ${KV_FULL});
KV_PATCH=$(get_version_component_range 3- ${KV_FULL});
KV_PATCH=${KV_PATCH//-*};
[[ -n ${KV_FULL#*-} ]] && [[ -n ${KV_FULL//${KV_FULL#*-}} ]] && KV_EXTRA="-${KV_FULL#*-}";
fi;
fi;
return 0
}
get_version ()
{
local kbuild_output;
[ -n "${KV_FULL}" ] && return 0;
unset KV_DIR;
qeinfo "Determining the location of the kernel source code";
[ -h "${KERNEL_DIR}" ] && KV_DIR="$(readlink -f ${KERNEL_DIR})";
[ -d "${KERNEL_DIR}" ] && KV_DIR="${KERNEL_DIR}";
if [ -z "${KV_DIR}" ]; then
qeerror "Unable to find kernel sources at ${KERNEL_DIR}";
qeinfo "This package requires Linux sources.";
if [ "${KERNEL_DIR}" == "/usr/src/linux" ]; then
qeinfo "Please make sure that ${KERNEL_DIR} points at your running kernel, ";
qeinfo "(or the kernel you wish to build against).";
qeinfo "Alternatively, set the KERNEL_DIR environment variable to the kernel sources location";
else
qeinfo "Please ensure that the KERNEL_DIR environment variable points at full Linux sources of the kernel you wish to compile against.";
fi;
return 1;
fi;
qeinfo "Found kernel source directory:";
qeinfo " ${KV_DIR}";
if [ ! -s "${KV_DIR}/Makefile" ]; then
qeerror "Could not find a Makefile in the kernel source directory.";
qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources";
return 1;
fi;
OUTPUT_DIR="${OUTPUT_DIR:-${KBUILD_OUTPUT}}";
kbuild_output="$(getfilevar KBUILD_OUTPUT ${KV_DIR}/Makefile)";
OUTPUT_DIR="${OUTPUT_DIR:-${kbuild_output}}";
KV_MAJOR="$(getfilevar VERSION ${KV_DIR}/Makefile)";
KV_MINOR="$(getfilevar PATCHLEVEL ${KV_DIR}/Makefile)";
KV_PATCH="$(getfilevar SUBLEVEL ${KV_DIR}/Makefile)";
KV_EXTRA="$(getfilevar EXTRAVERSION ${KV_DIR}/Makefile)";
if [ -z "${KV_MAJOR}" -o -z "${KV_MINOR}" -o -z "${KV_PATCH}" ]; then
qeerror "Could not detect kernel version.";
qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources.";
return 1;
fi;
[ "${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}" == "$(uname -r)" ] && OUTPUT_DIR="${OUTPUT_DIR:-/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}/build}";
[ -h "${OUTPUT_DIR}" ] && KV_OUT_DIR="$(readlink -f ${OUTPUT_DIR})";
[ -d "${OUTPUT_DIR}" ] && KV_OUT_DIR="${OUTPUT_DIR}";
if [ -n "${KV_OUT_DIR}" ]; then
qeinfo "Found kernel object directory:";
qeinfo " ${KV_OUT_DIR}";
KV_LOCAL="$(get_localversion ${KV_OUT_DIR})";
fi;
KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}";
KV_LOCAL="${KV_LOCAL}$(get_localversion ${KV_DIR})";
if linux_config_exists; then
KV_LOCAL="${KV_LOCAL}$(linux_chkconfig_string LOCALVERSION)";
KV_LOCAL="${KV_LOCAL//\"/}";
[ -e ${KV_DIR}/scripts/setlocalversion ] && linux_chkconfig_builtin LOCALVERSION_AUTO && KV_LOCAL="${KV_LOCAL}$(sh ${KV_DIR}/scripts/setlocalversion ${KV_DIR})";
fi;
KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}";
qeinfo "Found sources for kernel version:";
qeinfo " ${KV_FULL}";
return 0
}
get_version_component_count ()
{
__versionator_shopt_toggle on;
local a;
a=($(get_version_components "${1:-${PV}}" ));
echo ${#a[@]};
__versionator_shopt_toggle off
}
get_version_component_range ()
{
__versionator_shopt_toggle on;
local c v="${2:-${PV}}" range="${1}" range_start range_end i=-1 j=0;
c=($(get_all_version_components ${v} ));
range_start="${range%-*}";
range_start="${range_start:-1}";
range_end="${range#*-}";
range_end="${range_end:-${#c[@]}}";
while (( j < ${range_start} )); do
i=$(($i + 1));
[[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return;
[[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1));
done;
while (( j <= ${range_end} )); do
echo -n ${c[$i]};
[[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return;
[[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1));
i=$(($i + 1));
done;
__versionator_shopt_toggle off
}
get_version_components ()
{
__versionator_shopt_toggle on;
local c="$(get_all_version_components "${1:-${PV}}")";
c=(${c[@]//[-._]/ });
echo ${c[@]};
__versionator_shopt_toggle off
}
getfilevar ()
{
local ERROR basefname basedname myARCH="${ARCH}";
ERROR=0;
[ -z "${1}" ] && ERROR=1;
[ ! -f "${2}" ] && ERROR=1;
if [ "${ERROR}" = 1 ]; then
echo -e "\n";
eerror "getfilevar requires 2 variables, with the second a valid file.";
eerror " getfilevar <VARIABLE> <CONFIGFILE>";
else
basefname="$(basename ${2})";
basedname="$(dirname ${2})";
unset ARCH;
echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | make -C "${basedname}" M="${S}" ${BUILD_FIXES} -s -f - 2> /dev/null;
ARCH=${myARCH};
fi
}
has_hardened ()
{
ewarn "has_hardened: deprecated, please use gcc-specs-{relro,now}()!" 1>&2;
test_version_info Hardened && return 0;
[[ -f ${GCC_SPECS} && ${GCC_SPECS} != ${GCC_SPECS/hardened/} ]]
}
has_m32 ()
{
[ "$(tc-arch)" = "amd64" ] && has_multilib_profile && return 0;
local temp=$(emktemp);
echo "int main() { return(0); }" > "${temp}".c;
MY_CC=$(tc-getCC);
${MY_CC/ .*/} -m32 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
local ret=$?;
rm -f "${temp}".c;
[[ ${ret} != 1 ]] && return 0;
return 1
}
has_m64 ()
{
local temp="$(emktemp)";
echo "int main() { return(0); }" > "${temp}".c;
MY_CC=$(tc-getCC);
${MY_CC/ .*/} -m64 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
local ret=$?;
rm -f "${temp}".c;
[[ ${ret} != 1 ]] && return 0;
return 1
}
has_multilib_profile ()
{
[ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
}
has_pic ()
{
ewarn "has_pic: deprecated, please use gcc-specs-pie()!" 1>&2;
[[ ${CFLAGS/-fPIC} != ${CFLAGS} || ${CFLAGS/-fpic} != ${CFLAGS} ]] || gcc-specs-pie
}
has_pie ()
{
ewarn "has_pie: deprecated, please use gcc-specs-pie()!" 1>&2;
[[ ${CFLAGS/-fPIE} != ${CFLAGS} || ${CFLAGS/-fpie} != ${CFLAGS} ]] || gcc-specs-pie
}
has_ssp ()
{
ewarn "has_ssp: deprecated, please use gcc-specs-ssp()!" 1>&2;
[[ ${CFLAGS/-fstack-protector} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP__) ]] || gcc-specs-ssp
}
has_ssp_all ()
{
ewarn "has_ssp_all: deprecated, please use gcc-specs-ssp()!" 1>&2;
[[ ${CFLAGS/-fstack-protector-all} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP_ALL__) ]] || gcc-specs-ssp-to-all
}
is-flag ()
{
is-flagq "$@" && echo true
}
is-flagq ()
{
[[ -n $2 ]] && die "Usage: is-flag <flag>";
_is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 || _is_flagq FFLAGS $1 || _is_flagq FCFLAGS $1
}
is-ldflag ()
{
is-ldflagq "$@" && echo true
}
is-ldflagq ()
{
[[ -n $2 ]] && die "Usage: is-ldflag <flag>";
_is_flagq LDFLAGS $1
}
is-login-disabled ()
{
shell=$(egetshell "$1");
case ${shell} in
/bin/false | /usr/bin/false | /sbin/nologin | /usr/sbin/nologin)
return 0
;;
*)
return 1
;;
esac
}
is_final_abi ()
{
has_multilib_profile || return 0;
local ALL_ABIS=$(get_install_abis);
local LAST_ABI=${ALL_ABIS/* /};
[[ ${LAST_ABI} == ${ABI} ]]
}
kernel_is ()
{
get_version;
local operator test value x=0 y=0 z=0;
case ${1} in
lt)
operator="-lt";
shift
;;
gt)
operator="-gt";
shift
;;
le)
operator="-le";
shift
;;
ge)
operator="-ge";
shift
;;
eq)
operator="-eq";
shift
;;
*)
operator="-eq"
;;
esac;
for x in ${@};
do
for ((y=0; y<$((3 - ${#x})); y++))
do
value="${value}0";
done;
value="${value}${x}";
z=$((${z} + 1));
case ${z} in
1)
for ((y=0; y<$((3 - ${#KV_MAJOR})); y++))
do
test="${test}0";
done;
test="${test}${KV_MAJOR}"
;;
2)
for ((y=0; y<$((3 - ${#KV_MINOR})); y++))
do
test="${test}0";
done;
test="${test}${KV_MINOR}"
;;
3)
for ((y=0; y<$((3 - ${#KV_PATCH})); y++))
do
test="${test}0";
done;
test="${test}${KV_PATCH}"
;;
*)
die "Error in kernel-2_kernel_is(): Too many parameters."
;;
esac;
done;
[ ${test} ${operator} ${value} ] && return 0 || return 1
}
linux-info_pkg_setup ()
{
get_version || die "Unable to calculate Linux Kernel version";
if kernel_is 2 4; then
if [ "$( gcc-major-version )" -eq "4" ]; then
echo;
ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with";
ewarn "linux-2.4 (or modules building against a linux-2.4 kernel)!";
echo;
ewarn "Either switch to another gcc-version (via gcc-config) or use a";
ewarn "newer kernel that supports gcc-4.";
echo;
ewarn "Also be aware that bugreports about gcc-4 not working";
ewarn "with linux-2.4 based ebuilds will be closed as INVALID!";
echo;
epause 10;
fi;
fi;
[ -n "${CONFIG_CHECK}" ] && check_extra_config
}
linux-mod_pkg_postinst ()
{
debug-print-function ${FUNCNAME} $*;
${UPDATE_DEPMOD} && update_depmod;
${UPDATE_MODULES} && update_modules;
${UPDATE_MODULEDB} && update_moduledb
}
linux-mod_pkg_postrm ()
{
debug-print-function ${FUNCNAME} $*;
remove_moduledb
}
linux-mod_pkg_preinst ()
{
debug-print-function ${FUNCNAME} $*;
[ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false;
[ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false;
[ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
}
linux-mod_pkg_setup ()
{
debug-print-function ${FUNCNAME} $*;
linux-info_pkg_setup;
require_configured_kernel;
check_kernel_built;
strip_modulenames;
[[ -n ${MODULE_NAMES} ]] && check_modules_supported;
set_kvobj
}
linux-mod_src_compile ()
{
debug-print-function ${FUNCNAME} $*;
local modulename libdir srcdir objdir i n myABI="${ABI}";
set_arch_to_kernel;
ABI="${KERNEL_ABI}";
BUILD_TARGETS=${BUILD_TARGETS:-clean module};
strip_modulenames;
cd "${S}";
touch Module.symvers;
for i in ${MODULE_NAMES};
do
unset libdir srcdir objdir;
for n in $(find_module_params ${i});
do
eval ${n/:*}=${n/*:/};
done;
libdir=${libdir:-misc};
srcdir=${srcdir:-${S}};
objdir=${objdir:-${srcdir}};
if [ ! -f "${srcdir}/.built" ]; then
cd ${srcdir};
ln -s "${S}"/Module.symvers Module.symvers;
einfo "Preparing ${modulename} module";
if [[ -n ${ECONF_PARAMS} ]]; then
econf ${ECONF_PARAMS} || die "Unable to run econf ${ECONF_PARAMS}";
fi;
eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" CROSS_COMPILE=${CHOST}- LDFLAGS=\"$(get_abi_LDFLAGS)\" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} " || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}";
cd ${OLDPWD};
touch ${srcdir}/.built;
fi;
done;
set_arch_to_portage;
ABI="${myABI}"
}
linux-mod_src_install ()
{
debug-print-function ${FUNCNAME} $*;
local modulename libdir srcdir objdir i n;
strip_modulenames;
for i in ${MODULE_NAMES};
do
unset libdir srcdir objdir;
for n in $(find_module_params ${i});
do
eval ${n/:*}=${n/*:/};
done;
libdir=${libdir:-misc};
srcdir=${srcdir:-${S}};
objdir=${objdir:-${srcdir}};
einfo "Installing ${modulename} module";
cd ${objdir} || die "${objdir} does not exist";
insinto /lib/modules/${KV_FULL}/${libdir};
doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed";
cd ${OLDPWD};
generate_modulesd ${objdir}/${modulename};
done
}
linux_chkconfig_builtin ()
{
local RESULT;
require_configured_kernel;
RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)";
[ "${RESULT}" = "y" ] && return 0 || return 1
}
linux_chkconfig_module ()
{
local RESULT;
require_configured_kernel;
RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)";
[ "${RESULT}" = "m" ] && return 0 || return 1
}
linux_chkconfig_present ()
{
local RESULT;
require_configured_kernel;
RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)";
[ "${RESULT}" = "m" -o "${RESULT}" = "y" ] && return 0 || return 1
}
linux_chkconfig_string ()
{
require_configured_kernel;
getfilevar "CONFIG_${1}" "${KV_OUT_DIR}/.config"
}
linux_config_exists ()
{
[ -s "${KV_OUT_DIR}/.config" ]
}
make_desktop_entry ()
{
[[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1;
local exec=${1};
local name=${2:-${PN}};
local icon=${3:-${PN}};
local type=${4};
local path=${5};
if [[ -z ${type} ]]; then
local catmaj=${CATEGORY%%-*};
local catmin=${CATEGORY##*-};
case ${catmaj} in
app)
case ${catmin} in
accessibility)
type=Accessibility
;;
admin)
type=System
;;
antivirus)
type=System
;;
arch)
type=Archiving
;;
backup)
type=Archiving
;;
cdr)
type=DiscBurning
;;
dicts)
type=Dictionary
;;
doc)
type=Documentation
;;
editors)
type=TextEditor
;;
emacs)
type=TextEditor
;;
emulation)
type=Emulator
;;
laptop)
type=HardwareSettings
;;
office)
type=Office
;;
pda)
type=PDA
;;
vim)
type=TextEditor
;;
xemacs)
type=TextEditor
;;
*)
type=
;;
esac
;;
dev)
type="Development"
;;
games)
case ${catmin} in
action | fps)
type=ActionGame
;;
arcade)
type=ArcadeGame
;;
board)
type=BoardGame
;;
emulation)
type=Emulator
;;
kids)
type=KidsGame
;;
puzzle)
type=LogicGame
;;
roguelike)
type=RolePlaying
;;
rpg)
type=RolePlaying
;;
simulation)
type=Simulation
;;
sports)
type=SportsGame
;;
strategy)
type=StrategyGame
;;
*)
type=
;;
esac;
type="Game;${type}"
;;
gnome)
type="Gnome;GTK"
;;
kde)
type="KDE;Qt"
;;
mail)
type="Network;Email"
;;
media)
case ${catmin} in
gfx)
type=Graphics
;;
radio)
type=Tuner
;;
sound)
type=Audio
;;
tv)
type=TV
;;
video)
type=Video
;;
*)
type=
;;
esac;
type="AudioVideo;${type}"
;;
net)
case ${catmin} in
dialup)
type=Dialup
;;
ftp)
type=FileTransfer
;;
im)
type=InstantMessaging
;;
irc)
type=IRCClient
;;
mail)
type=Email
;;
news)
type=News
;;
nntp)
type=News
;;
p2p)
type=FileTransfer
;;
*)
type=
;;
esac;
type="Network;${type}"
;;
sci)
case ${catmin} in
astro*)
type=Astronomy
;;
bio*)
type=Biology
;;
calc*)
type=Calculator
;;
chem*)
type=Chemistry
;;
elec*)
type=Electronics
;;
geo*)
type=Geology
;;
math*)
type=Math
;;
physics)
type=Physics
;;
visual*)
type=DataVisualization
;;
*)
type=
;;
esac;
type="Science;${type}"
;;
sys)
type="System"
;;
www)
case ${catmin} in
client)
type=WebBrowser
;;
*)
type=
;;
esac;
type="Network"
;;
*)
type=
;;
esac;
fi;
if [ "${SLOT}" == "0" ]; then
local desktop_name="${PN}";
else
local desktop_name="${PN}-${SLOT}";
fi;
local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
cat > "${desktop}" <<-EOF
[Desktop Entry]
Version=1.0
Name=${name}
Type=Application
Comment=${DESCRIPTION}
Exec=${exec}
TryExec=${exec%% *}
Icon=${icon}
Categories=${type};
EOF
[[ -n ${path} ]] && echo "Path=${path}" >> "${desktop}";
( insinto /usr/share/applications;
doins "${desktop}" )
}
make_session_desktop ()
{
[[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1;
[[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1;
local title=$1;
local command=$2;
local desktop=${T}/${wm}.desktop;
cat > "${desktop}" <<-EOF
[Desktop Entry]
Name=${title}
Comment=This session logs you into ${title}
Exec=${command}
TryExec=${command}
Type=Application
EOF
( insinto /usr/share/xsessions;
doins "${desktop}" )
}
make_wrapper ()
{
local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
local tmpwrapper=$(emktemp);
cat > "${tmpwrapper}" <<EOF
#!/bin/sh
cd "${chdir:-.}"
if [ -n "${libdir}" ] ; then
if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
else
export LD_LIBRARY_PATH="${libdir}"
fi
fi
exec ${bin} "\$@"
EOF
chmod go+rx "${tmpwrapper}";
if [[ -n ${path} ]]; then
( exeinto "${path}";
newexe "${tmpwrapper}" "${wrapper}" ) || die;
else
newbin "${tmpwrapper}" "${wrapper}" || die;
fi
}
move_old_moduledb ()
{
debug-print-function ${FUNCNAME} $*;
local OLDDIR=${ROOT}/usr/share/module-rebuild/;
local NEWDIR=${ROOT}/var/lib/module-rebuild/;
if [[ -f ${OLDDIR}/moduledb ]]; then
[[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR};
[[ ! -f ${NEWDIR}/moduledb ]] && mv ${OLDDIR}/moduledb ${NEWDIR}/moduledb;
rm -f ${OLDDIR}/*;
rmdir ${OLDDIR};
fi
}
multilib_env ()
{
local CTARGET=${1:-${CTARGET}};
case ${CTARGET} in
x86_64*)
export CFLAGS_x86=${CFLAGS_x86--m32};
export CHOST_x86=${CTARGET/x86_64/i686};
export CTARGET_x86=${CHOST_x86};
export CDEFINE_x86="__i386__";
export LIBDIR_x86="lib";
export CFLAGS_amd64=${CFLAGS_amd64--m64};
export CHOST_amd64=${CTARGET};
export CTARGET_amd64=${CHOST_amd64};
export CDEFINE_amd64="__x86_64__";
export LIBDIR_amd64="lib64";
export MULTILIB_ABIS="amd64 x86";
export DEFAULT_ABI="amd64"
;;
mips64*)
export CFLAGS_o32=${CFLAGS_o32--mabi=32};
export CHOST_o32=${CTARGET/mips64/mips};
export CTARGET_o32=${CHOST_o32};
export CDEFINE_o32="_MIPS_SIM == _ABIO32";
export LIBDIR_o32="lib";
export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
export CHOST_n32=${CTARGET};
export CTARGET_n32=${CHOST_n32};
export CDEFINE_n32="_MIPS_SIM == _ABIN32";
export LIBDIR_n32="lib32";
export CFLAGS_n64=${CFLAGS_n64--mabi=64};
export CHOST_n64=${CTARGET};
export CTARGET_n64=${CHOST_n64};
export CDEFINE_n64="_MIPS_SIM == _ABI64";
export LIBDIR_n64="lib64";
export MULTILIB_ABIS="n64 n32 o32";
export DEFAULT_ABI="n32"
;;
powerpc64*)
export CFLAGS_ppc=${CFLAGS_ppc--m32};
export CHOST_ppc=${CTARGET/powerpc64/powerpc};
export CTARGET_ppc=${CHOST_ppc};
export CDEFINE_ppc="!__powerpc64__";
export LIBDIR_ppc="lib";
export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
export CHOST_ppc64=${CTARGET};
export CTARGET_ppc64=${CHOST_ppc64};
export CDEFINE_ppc64="__powerpc64__";
export LIBDIR_ppc64="lib64";
export MULTILIB_ABIS="ppc64 ppc";
export DEFAULT_ABI="ppc64"
;;
s390x*)
export CFLAGS_s390=${CFLAGS_s390--m31};
export CHOST_s390=${CTARGET/s390x/s390};
export CTARGET_s390=${CHOST_s390};
export CDEFINE_s390="!__s390x__";
export LIBDIR_s390="lib";
export CFLAGS_s390x=${CFLAGS_s390x--m64};
export CHOST_s390x=${CTARGET};
export CTARGET_s390x=${CHOST_s390x};
export CDEFINE_s390x="__s390x__";
export LIBDIR_s390x="lib64";
export MULTILIB_ABIS="s390x s390";
export DEFAULT_ABI="s390x"
;;
sparc*)
export CFLAGS_sparc32=${CFLAGS_sparc32};
export CHOST_sparc32=${CTARGET/sparc64/sparc};
export CTARGET_sparc32=${CHOST_sparc32};
export CDEFINE_sparc32="!__arch64__";
export LIBDIR_sparc32="lib";
export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
export CHOST_sparc64=${CTARGET};
export CTARGET_sparc64=${CHOST_sparc64};
export CDEFINE_sparc64="__arch64__";
export LIBDIR_sparc64="lib64";
export MULTILIB_ABIS="${MULTILIB_ABIS-sparc64 sparc32}";
export DEFAULT_ABI="${DEFAULT_ABI-sparc64}"
;;
*)
export MULTILIB_ABIS="default";
export DEFAULT_ABI="default"
;;
esac
}
multilib_toolchain_setup ()
{
export ABI=$1;
if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
: ${CCACHE_DISABLE:=multilib-disable};
else
if [[ ${CCACHE_DISABLE} == "multilib-disable" ]]; then
unset CCACHE_DISABLE;
fi;
fi;
export CCACHE_DISABLE;
if has_version app-admin/eselect-compiler; then
export LD="ld $(get_abi_LDFLAGS $1)";
export AS="as $(get_abi_ASFLAGS $1)";
export CHOST=$(get_abi_CHOST $1);
export CBUILD=$(get_abi_CHOST $1);
else
tc-export CC;
fi
}
newicon ()
{
( insinto /usr/share/pixmaps;
newins "$@" )
}
newmenu ()
{
( insinto /usr/share/applications;
newins "$@" )
}
number_abis ()
{
get_install_abis | wc -w
}
pkg_nofetch ()
{
_eapi0_pkg_nofetch "$@"
}
pkg_postinst ()
{
elog;
elog "Remember that all mixer channels will be MUTED by default.";
elog "Use the 'alsamixer' program to unmute them, then save your";
elog "mixer settings with /etc/init.d/alsasound save";
elog;
elog "If you experience problems, please try building the in-kernel";
elog "ALSA drivers instead. This ebuild is unsupported.";
elog;
linux-mod_pkg_postinst;
if kernel_is 2 6 && [ -e "${ROOT}/lib/modules/${KV_FULL}/kernel/sound" ]; then
for file in $(find "${ROOT}/lib/modules/${KV_FULL}/${PN}" -type f);
do
rm -f ${file//${KV_FULL}\/${PN}/${KV_FULL}\/kernel\/sound};
done;
find "${ROOT}/lib/modules/${KV_FULL}/kernel/sound" -type d -print0 | xargs --null rmdir;
fi
}
pkg_postrm ()
{
linux-mod_pkg_postrm "$@"
}
pkg_preinst ()
{
linux-mod_pkg_preinst "$@"
}
pkg_setup ()
{
ALSA_CARDS=${ALSA_CARDS:-${IUSE_ALSA_CARDS}};
local PNP_DRIVERS="interwave interwave-stb";
local PNP_ERROR="Some of the drivers you selected require PnP support in your kernel (${PNP_DRIVERS}). Either enable PnP in your kernel or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local ISA_DRIVERS="cs4232 msnd-pinnacle adlib ad1816a ad1848 als100 azt2320
cmi8330 cs4231 cs4236 dt019x es968 es1688 es18xx gusclassic gusextreme gusmax
interwave interwave-stb opl3sa2 opti92x-ad1848 opti92x-cs4231 opti93x miro sb8
sb16 sbawe sb16_csp sgalaxy sscape wavefront";
local ISA_ERROR="Some of the drivers you selected require ISA support in your kernel ($(echo $ISA_DRIVERS)). Either enable ISA in your kernel or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local FW_DRIVERS="darla20 gina20 layla20 darla24 gina24 layla24 mona mia echo3g indigo
indigoio indigodj emu10k1 korg1212 maestro3 riptide ymfpci asihpi";
local FW_LOADER_ERROR="Some of the drivers you selected require 'Userspace firmware loading support' in your kernel (${FW_DRIVERS}). Either enable that feature or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local PARPORT_DRIVERS="portman2x4";
local PARPORT_ERROR="Some if the drivers you selected require Parallel Port support (${PARPORT_DRIVERS}). Either enable that feature or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local TMP_ALSA_CARDS;
local CHECK_PNP;
local CHECK_ISA;
local CHECK_FW;
local CHECK_PARPORT;
for card in ${ALSA_CARDS};
do
if has alsa_cards_${card} ${IUSE} && use alsa_cards_${card}; then
TMP_ALSA_CARDS="${TMP_ALSA_CARDS} ${card}";
has ${card} ${PNP_DRIVERS} && CHECK_PNP="PNP";
has ${card} ${ISA_DRIVERS} && CHECK_ISA="ISA";
has ${card} ${FW_DRIVERS} && CHECK_FW="FW_LOADER";
has ${card} ${PARPORT_DRIVERS} && CHECK_PARPORT="PARPORT";
fi;
done;
ALSA_CARDS="${TMP_ALSA_CARDS}";
local CONFIG_CHECK="!SND SOUND ${CHECK_PNP} ${CHECK_ISA} ${CHECK_FW} ${CHECK_PARPORT}";
local SND_ERROR="ALSA is already compiled into the kernel. This is the recommended configuration, don't emerge alsa-driver.";
local SOUND_ERROR="Your kernel doesn't have sound support enabled.";
local SOUND_PRIME_ERROR="Your kernel is configured to use the deprecated OSS drivers. Please disable them and re-emerge alsa-driver.";
linux-mod_pkg_setup;
if [[ ${PROFILE_ARCH} == "sparc64" ]]; then
export CBUILD=${CBUILD-${CHOST}};
export CHOST="sparc64-unknown-linux-gnu";
fi
}
prep_ml_includes ()
{
if [[ $(number_abis) -gt 1 ]]; then
local dir;
local dirs;
local base;
if [[ $# -eq 0 ]]; then
dirs=/usr/include;
else
dirs="$@";
fi;
for dir in ${dirs};
do
base=${T}/gentoo-multilib/${dir}/gentoo-multilib;
mkdir -p "${base}";
[[ -d ${base}/${ABI} ]] && rm -rf "${base}/${ABI}";
mv "${D}/${dir}" "${base}/${ABI}";
done;
if is_final_abi; then
base=${T}/gentoo-multilib;
pushd "${base}";
find . | tar -c -T - -f - | tar -x --no-same-owner -f - -C ${D};
popd;
set --;
for dir in ${dirs};
do
set -- "$@" "${dir}";
local abi;
for abi in $(get_install_abis);
do
set -- "$@" "$(get_abi_CDEFINE ${abi}):${dir}/gentoo-multilib/${abi}";
done;
create_ml_includes "$@";
done;
fi;
fi
}
preserve_old_lib ()
{
if [[ ${EBUILD_PHASE} != "preinst" ]]; then
eerror "preserve_old_lib() must be called from pkg_preinst() only";
die "Invalid preserve_old_lib() usage";
fi;
[[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
has preserve-libs ${FEATURES} && return 0;
local lib dir;
for lib in "$@";
do
[[ -e ${ROOT}/${lib} ]] || continue;
dir=${lib%/*};
dodir ${dir} || die "dodir ${dir} failed";
cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed";
touch "${D}"/${lib};
done
}
preserve_old_lib_notify ()
{
if [[ ${EBUILD_PHASE} != "postinst" ]]; then
eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
die "Invalid preserve_old_lib_notify() usage";
fi;
has preserve-libs ${FEATURES} && return 0;
local lib notice=0;
for lib in "$@";
do
[[ -e ${ROOT}/${lib} ]] || continue;
if [[ ${notice} -eq 0 ]]; then
notice=1;
ewarn "Old versions of installed libraries were detected on your system.";
ewarn "In order to avoid breaking packages that depend on these old libs,";
ewarn "the libraries are not being removed. You need to run revdep-rebuild";
ewarn "in order to remove these old dependencies. If you do not have this";
ewarn "helper program, simply emerge the 'gentoolkit' package.";
ewarn;
fi;
ewarn " # revdep-rebuild --library ${lib##*/}";
done;
if [[ ${notice} -eq 1 ]]; then
ewarn;
ewarn "Once you've finished running revdep-rebuild, it should be safe to";
ewarn "delete the old libraries. Here is a copy & paste for the lazy:";
for lib in "$@";
do
ewarn " # rm '${lib}'";
done;
fi
}
qeerror ()
{
qout eerror "${@}"
}
qeinfo ()
{
qout einfo "${@}"
}
qout ()
{
local outputmsg type;
type=${1};
shift;
outputmsg="${@}";
case "${EBUILD_PHASE}" in
depend)
unset outputmsg
;;
clean)
unset outputmsg
;;
preinst)
unset outputmsg
;;
esac;
[ -n "${outputmsg}" ] && ${type} "${outputmsg}"
}
raw-ldflags ()
{
local x input="$@";
[[ -z ${input} ]] && input=${LDFLAGS};
set --;
for x in ${input};
do
x=${x#-Wl,};
set -- "$@" ${x//,/ };
done;
echo "$@"
}
remove_moduledb ()
{
debug-print-function ${FUNCNAME} $*;
local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/;
move_old_moduledb;
if grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb; then
einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb.";
sed -i -e "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb;
fi
}
replace-cpu-flags ()
{
local newcpu="$#";
newcpu="${!newcpu}";
while [ $# -gt 1 ]; do
replace-flags "-march=${1}" "-march=${newcpu}";
replace-flags "-mcpu=${1}" "-mcpu=${newcpu}";
replace-flags "-mtune=${1}" "-mtune=${newcpu}";
shift;
done;
return 0
}
replace-flags ()
{
[[ $# != 2 ]] && echo && eerror "Usage: replace-flags <old flag> <new flag>" && die "replace-flags takes 2 arguments, not $#";
local f fset;
declare -a new_CFLAGS new_CXXFLAGS new_FFLAGS new_FCFLAGS;
for fset in CFLAGS CXXFLAGS FFLAGS FCFLAGS;
do
for f in ${!fset};
do
[[ ${f} == ${1} ]] && f=${2};
eval new_${fset}\[\${\#new_${fset}\[@]}]=\${f};
done;
eval export ${fset}=\${new_${fset}\[*]};
done;
return 0
}
replace-sparc64-flags ()
{
local SPARC64_CPUS="ultrasparc3 ultrasparc v9";
if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then
for x in ${SPARC64_CPUS};
do
CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}";
done;
else
for x in ${SPARC64_CPUS};
do
CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
done;
fi;
if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then
for x in ${SPARC64_CPUS};
do
CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}";
done;
else
for x in ${SPARC64_CPUS};
do
CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
done;
fi;
export CFLAGS CXXFLAGS
}
replace_all_version_separators ()
{
__versionator_shopt_toggle on;
local c;
c=($(get_all_version_components "${2:-${PV}}" ));
c="${c[@]//[-._]/$1}";
echo ${c// };
__versionator_shopt_toggle off
}
replace_version_separator ()
{
__versionator_shopt_toggle on;
local w i c found=0 v="${3:-${PV}}";
w=${1:-1};
c=($(get_all_version_components ${v} ));
if [[ "${w//[[:digit:]]/}" == "${w}" ]]; then
for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 ))
do
if [[ "${c[${i}]}" == "${w}" ]]; then
c[${i}]="${2}";
break;
fi;
done;
else
for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 ))
do
if [[ -n "${c[${i}]//[^-._]}" ]]; then
found=$(($found + 1));
if [[ "$found" == "${w}" ]]; then
c[${i}]="${2}";
break;
fi;
fi;
done;
fi;
c=${c[@]};
echo ${c// };
__versionator_shopt_toggle off
}
require_configured_kernel ()
{
if ! linux_config_exists; then
qeerror "Could not find a usable .config in the kernel source directory.";
qeerror "Please ensure that ${KERNEL_DIR} points to a configured set of Linux sources.";
qeerror "If you are using KBUILD_OUTPUT, please set the environment var so that";
qeerror "it points to the necessary object directory so that it might find .config.";
die "Kernel not configured; no .config found in ${KV_OUT_DIR}";
fi
}
seq ()
{
local p=$(type -P seq);
case $# in
1)
min=1 max=$1 step=1
;;
2)
min=$1 max=$2 step=1
;;
3)
min=$1 max=$3 step=$2
;;
*)
die "seq called with wrong number of arguments"
;;
esac;
if [[ -z ${p} ]]; then
local reps;
if [[ ${step} != 0 ]]; then
reps=$(( ($max-$min) / $step +1 ));
else
reps=0;
fi;
jot $reps $min $max $step;
else
"${p}" $min $step $max;
fi
}
set_arch_to_kernel ()
{
export ARCH=$(tc-arch-kernel)
}
set_arch_to_portage ()
{
export ARCH=$(tc-arch)
}
set_kvobj ()
{
debug-print-function ${FUNCNAME} $*;
if kernel_is 2 6; then
KV_OBJ="ko";
else
KV_OBJ="o";
fi
}
setup-allowed-flags ()
{
if [[ -z ${ALLOWED_FLAGS} ]]; then
export ALLOWED_FLAGS="-pipe";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -O -O0 -O1 -O2 -mcpu -march -mtune";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fstack-protector -fstack-protector-all";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fbounds-checking -fno-strict-overflow";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-PIE -fno-pie -fno-unit-at-a-time";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w";
fi;
ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow";
ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt -m*-toc -D* -U*";
export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks";
return 0
}
src_compile ()
{
local myABI=${ABI:-${DEFAULT_ABI}};
is-flag "-malign-double" && filter-flags "-fomit-frame-pointer";
append-flags "-I${KV_DIR}/arch/$(tc-arch-kernel)/include";
econf $(use_with oss) $(use_with oss pcm-oss-plugins) $(use_with debug debug full) --with-kernel="${KV_DIR}" --with-build="${KV_OUT_DIR}" --with-redhat=no --with-suse=no --with-isapnp=auto $(use_with midi sequencer) --with-cards="${ALSA_CARDS} --with-card-options=all" || die "econf failed";
ARCH=$(tc-arch-kernel);
ABI=${KERNEL_ABI};
emake LDFLAGS="$(raw-ldflags)" HOSTCC="$(tc-getBUILD_CC)" CC="$(tc-getCC)" || die "Make Failed";
ARCH=$(tc-arch);
ABI=${myABI}
}
src_install ()
{
emake DESTDIR="${D}" install-modules || die "make install failed";
dodoc CARDS-STATUS FAQ README WARNING TODO SUPPORTED_KERNELS;
if kernel_is 2 6; then
mv "${D}/lib/modules/${KV_FULL}/kernel/sound" "${D}/lib/modules/${KV_FULL}/${PN}";
rmdir "${D}/lib/modules/${KV_FULL}/kernel" >&/dev/null;
fi
}
src_test ()
{
_eapi0_src_test "$@"
}
src_unpack ()
{
unpack ${A};
cd "${S}";
convert_to_m "${S}/Makefile";
sed -i -e 's:\(.*depmod\):#\1:' "${S}/Makefile";
eautoconf
}
strip-flags ()
{
local x y flag NEW_CFLAGS NEW_CXXFLAGS NEW_FFLAGS NEW_FCFLAGS;
setup-allowed-flags;
local NEW_CFLAGS="";
local NEW_CXXFLAGS="";
local NEW_FFLAGS="";
local NEW_FCFLAGS="";
if has ~$(tc-arch) ${ACCEPT_KEYWORDS}; then
ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}";
fi;
set -f;
for x in ${CFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_CFLAGS="${NEW_CFLAGS} ${x}";
break;
fi;
done;
done;
for x in ${CXXFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_CXXFLAGS="${NEW_CXXFLAGS} ${x}";
break;
fi;
done;
done;
for x in ${FFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_FFLAGS="${NEW_FFLAGS} ${x}";
break;
fi;
done;
done;
for x in ${FCFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_FCFLAGS="${NEW_FCFLAGS} ${x}";
break;
fi;
done;
done;
if [ "${CFLAGS/-O}" != "${CFLAGS}" -a "${NEW_CFLAGS/-O}" = "${NEW_CFLAGS}" ]; then
NEW_CFLAGS="${NEW_CFLAGS} -O2";
fi;
if [ "${CXXFLAGS/-O}" != "${CXXFLAGS}" -a "${NEW_CXXFLAGS/-O}" = "${NEW_CXXFLAGS}" ]; then
NEW_CXXFLAGS="${NEW_CXXFLAGS} -O2";
fi;
if [ "${FFLAGS/-O}" != "${FFLAGS}" -a "${NEW_FFLAGS/-O}" = "${NEW_FFLAGS}" ]; then
NEW_FFLAGS="${NEW_FFLAGS} -O2";
fi;
if [ "${FCFLAGS/-O}" != "${FCFLAGS}" -a "${NEW_FCFLAGS/-O}" = "${NEW_FCFLAGS}" ]; then
NEW_FCFLAGS="${NEW_FCFLAGS} -O2";
fi;
set +f;
export CFLAGS="${NEW_CFLAGS}";
export CXXFLAGS="${NEW_CXXFLAGS}";
export FFLAGS="${NEW_FFLAGS}";
export FCFLAGS="${NEW_FCFLAGS}";
return 0
}
strip-linguas ()
{
local ls newls nols;
if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
local op=$1;
shift;
ls=$(find "$1" -name '*.po' -exec basename {} .po \;);
shift;
local d f;
for d in "$@";
do
if [[ ${op} == "-u" ]]; then
newls=${ls};
else
newls="";
fi;
for f in $(find "$d" -name '*.po' -exec basename {} .po \;);
do
if [[ ${op} == "-i" ]]; then
hasq ${f} ${ls} && newls="${newls} ${f}";
else
hasq ${f} ${ls} || newls="${newls} ${f}";
fi;
done;
ls=${newls};
done;
else
ls="$@";
fi;
nols="";
newls="";
for f in ${LINGUAS};
do
if hasq ${f} ${ls}; then
newls="${newls} ${f}";
else
nols="${nols} ${f}";
fi;
done;
[[ -n ${nols} ]] && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols};
export LINGUAS=${newls:1}
}
strip-unsupported-flags ()
{
export CFLAGS=$(test-flags-CC ${CFLAGS});
export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS});
export FFLAGS=$(test-flags-F77 ${FFLAGS});
export FCFLAGS=$(test-flags-FC ${FCFLAGS})
}
strip_modulenames ()
{
debug-print-function ${FUNCNAME} $*;
local i;
for i in ${MODULE_IGNORE};
do
MODULE_NAMES=${MODULE_NAMES//${i}(*};
done
}
tc-arch ()
{
tc-ninja_magic_to_arch portage "$@"
}
tc-arch-kernel ()
{
tc-ninja_magic_to_arch kern "$@"
}
tc-endian ()
{
local host=$1;
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
host=${host%%-*};
case ${host} in
alpha*)
echo big
;;
arm*b*)
echo big
;;
arm*)
echo little
;;
cris*)
echo little
;;
hppa*)
echo big
;;
i?86*)
echo little
;;
ia64*)
echo little
;;
m68*)
echo big
;;
mips*l*)
echo little
;;
mips*)
echo big
;;
powerpc*)
echo big
;;
s390*)
echo big
;;
sh*b*)
echo big
;;
sh*)
echo little
;;
sparc*)
echo big
;;
x86_64*)
echo little
;;
*)
echo wtf
;;
esac
}
tc-export ()
{
local var;
for var in "$@";
do
[[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
eval tc-get${var} > /dev/null;
done
}
tc-getAR ()
{
tc-getPROG AR ar "$@"
}
tc-getAS ()
{
tc-getPROG AS as "$@"
}
tc-getBUILD_CC ()
{
local v;
for v in CC_FOR_BUILD BUILD_CC HOSTCC;
do
if [[ -n ${!v} ]]; then
export BUILD_CC=${!v};
echo "${!v}";
return 0;
fi;
done;
local search=;
if [[ -n ${CBUILD} ]]; then
search=$(type -p ${CBUILD}-gcc);
search=${search##*/};
fi;
search=${search:-gcc};
export BUILD_CC=${search};
echo "${search}"
}
tc-getCC ()
{
tc-getPROG CC gcc "$@"
}
tc-getCPP ()
{
tc-getPROG CPP cpp "$@"
}
tc-getCXX ()
{
tc-getPROG CXX g++ "$@"
}
tc-getF77 ()
{
tc-getPROG F77 f77 "$@"
}
tc-getFC ()
{
tc-getPROG FC gfortran "$@"
}
tc-getGCJ ()
{
tc-getPROG GCJ gcj "$@"
}
tc-getLD ()
{
tc-getPROG LD ld "$@"
}
tc-getNM ()
{
tc-getPROG NM nm "$@"
}
tc-getPROG ()
{
local var=$1;
local prog=$2;
if [[ -n ${!var} ]]; then
echo "${!var}";
return 0;
fi;
local search=;
[[ -n $3 ]] && search=$(type -p "$3-${prog}");
[[ -z ${search} && -n ${CHOST} ]] && search=$(type -p "${CHOST}-${prog}");
[[ -n ${search} ]] && prog=${search##*/};
export ${var}=${prog};
echo "${!var}"
}
tc-getRANLIB ()
{
tc-getPROG RANLIB ranlib "$@"
}
tc-getSTRIP ()
{
tc-getPROG STRIP strip "$@"
}
tc-is-cross-compiler ()
{
return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
}
tc-is-softfloat ()
{
case ${CTARGET} in
bfin* | h8300*)
echo "only"
;;
*)
[[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no"
;;
esac
}
tc-ninja_magic_to_arch ()
{
function ninj ()
{
[[ ${type} == "kern" ]] && echo $1 || echo $2
};
local type=$1;
local host=$2;
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
case ${host} in
alpha*)
echo alpha
;;
arm*)
echo arm
;;
avr*)
ninj avr32 avr
;;
bfin*)
ninj blackfin bfin
;;
cris*)
echo cris
;;
hppa*)
ninj parisc hppa
;;
i?86*)
if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
echo i386;
else
echo x86;
fi
;;
ia64*)
echo ia64
;;
m68*)
echo m68k
;;
mips*)
echo mips
;;
nios2*)
echo nios2
;;
nios*)
echo nios
;;
powerpc*)
if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]] && [[ ${type} == "kern" ]]; then
echo powerpc;
else
if [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]] && [[ ${type} == "kern" ]]; then
if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
echo powerpc;
else
echo ppc;
fi;
else
if [[ ${host} == powerpc64* ]]; then
echo ppc64;
else
if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
ninj ppc64 ppc;
else
echo ppc;
fi;
fi;
fi;
fi
;;
s390*)
echo s390
;;
sh64*)
ninj sh64 sh
;;
sh*)
echo sh
;;
sparc64*)
ninj sparc64 sparc
;;
sparc*)
[[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
;;
vax*)
echo vax
;;
x86_64*)
if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
echo x86;
else
ninj x86_64 amd64;
fi
;;
*)
echo unknown
;;
esac
}
test-flag-CC ()
{
test-flag-PROG "CC" "$1"
}
test-flag-CXX ()
{
test-flag-PROG "CXX" "$1"
}
test-flag-F77 ()
{
test-flag-PROG "F77" "$1"
}
test-flag-FC ()
{
test-flag-PROG "FC" "$1"
}
test-flag-PROG ()
{
local comp=$1;
local flags="$2";
[[ -z ${comp} || -z ${flags} ]] && return 1;
local PROG=$(tc-get${comp});
${PROG} ${flags} -S -o /dev/null -xc /dev/null > /dev/null 2>&1
}
test-flags ()
{
test-flags-CC "$@"
}
test-flags-CC ()
{
test-flags-PROG "CC" "$@"
}
test-flags-CXX ()
{
test-flags-PROG "CXX" "$@"
}
test-flags-F77 ()
{
test-flags-PROG "F77" "$@"
}
test-flags-FC ()
{
test-flags-PROG "FC" "$@"
}
test-flags-PROG ()
{
local comp=$1;
local flags;
local x;
shift;
[[ -z ${comp} ]] && return 1;
x="";
for x in "$@";
do
test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}";
done;
echo "${flags}";
[[ -n ${flags} ]]
}
test_flag ()
{
ewarn "test_flag: deprecated, please use test-flags()!" 1>&2;
test-flags-CC "$@"
}
test_version_info ()
{
if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
return 0;
else
return 1;
fi
}
treecopy ()
{
dest=${!#};
files_count=$#;
while (( $# > 1 )); do
dirstruct=$(dirname "$1");
mkdir -p "${dest}/${dirstruct}";
cp -pPR "$1" "${dest}/${dirstruct}";
shift;
done
}
uclibctoolize ()
{
ewarn "uclibctoolize() is deprecated, please just use elibtoolize()!";
elibtoolize
}
unpack_makeself ()
{
local src_input=${1:-${A}};
local src=$(find_unpackable_file "${src_input}");
local skip=$2;
local exe=$3;
[[ -z ${src} ]] && die "Could not locate source for '${src_input}'";
local shrtsrc=$(basename "${src}");
echo ">>> Unpacking ${shrtsrc} to ${PWD}";
if [[ -z ${skip} ]]; then
local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}');
local skip=0;
exe=tail;
case ${ver} in
1.5.* | 1.6.0-nv)
skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
;;
2.0 | 2.0.1)
skip=$(grep -a ^' 'tail "${src}" | awk '{print $2}' | cut -b2-)
;;
2.1.1)
skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-);
let skip="skip + 1"
;;
2.1.2)
skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1);
let skip="skip + 1"
;;
2.1.3)
skip=`grep -a ^offset= "${src}" | awk '{print $3}'`;
let skip="skip + 1"
;;
2.1.4 | 2.1.5)
skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1);
skip=$(head -n ${skip} "${src}" | wc -c);
exe="dd"
;;
*)
eerror "I'm sorry, but I was unable to support the Makeself file.";
eerror "The version I detected was '${ver}'.";
eerror "Please file a bug about the file ${shrtsrc} at";
eerror "http://bugs.gentoo.org/ so that support can be added.";
die "makeself version '${ver}' not supported"
;;
esac;
debug-print "Detected Makeself version ${ver} ... using ${skip} as offset";
fi;
case ${exe} in
tail)
exe="tail -n +${skip} '${src}'"
;;
dd)
exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'"
;;
*)
die "makeself cant handle exe '${exe}'"
;;
esac;
local tmpfile=$(emktemp);
eval ${exe} 2> /dev/null | head -c 512 > "${tmpfile}";
local filetype=$(file -b "${tmpfile}");
case ${filetype} in
*tar\ archive*)
eval ${exe} | tar --no-same-owner -xf -
;;
bzip2*)
eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
;;
gzip*)
eval ${exe} | tar --no-same-owner -xzf -
;;
compress*)
eval ${exe} | gunzip | tar --no-same-owner -xf -
;;
*)
eerror "Unknown filetype \"${filetype}\" ?";
false
;;
esac;
_pipestatus="${PIPESTATUS[*]}";
[[ "${_pipestatus// /}" -eq 0 ]] || die "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
}
unpack_pdv ()
{
local src=$(find_unpackable_file "$1");
local sizeoff_t=$2;
[[ -z ${src} ]] && die "Could not locate source for '$1'";
[[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(";
local shrtsrc=$(basename "${src}");
echo ">>> Unpacking ${shrtsrc} to ${PWD}";
local metaskip=$(tail -c ${sizeoff_t} "${src}" | hexdump -e \"%i\");
local tailskip=$(tail -c $((${sizeoff_t}*2)) "${src}" | head -c ${sizeoff_t} | hexdump -e \"%i\");
local metafile=$(emktemp);
tail -c +$((${metaskip}+1)) "${src}" > "${metafile}";
local datafile=$(tail -c +$((${metaskip}+1)) "${src}" | strings | head -n 1);
datafile=$(basename "${datafile}");
local tmpfile=$(emktemp);
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c 512 > ${tmpfile};
local iscompressed=$(file -b "${tmpfile}");
if [[ ${iscompressed:0:8} == "compress" ]]; then
iscompressed=1;
mv ${tmpfile}{,.Z};
gunzip ${tmpfile};
else
iscompressed=0;
fi;
local istar=$(file -b "${tmpfile}");
if [[ ${istar:0:9} == "POSIX tar" ]]; then
istar=1;
else
istar=0;
fi;
if [ ${iscompressed} -eq 1 ]; then
if [ ${istar} -eq 1 ]; then
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar -xzf -;
else
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | gzip -dc > ${datafile};
fi;
else
if [ ${istar} -eq 1 ]; then
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar --no-same-owner -xf -;
else
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) > ${datafile};
fi;
fi;
true
}
update_depmod ()
{
debug-print-function ${FUNCNAME} $*;
get_version;
ebegin "Updating module dependencies for ${KV_FULL}";
if [ -r ${KV_OUT_DIR}/System.map ]; then
depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL};
eend $?;
else
ewarn;
ewarn "${KV_OUT_DIR}/System.map not found.";
ewarn "You must manually update the kernel module dependencies using depmod.";
eend 1;
ewarn;
fi
}
update_moduledb ()
{
debug-print-function ${FUNCNAME} $*;
local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/;
move_old_moduledb;
if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then
[[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR};
touch ${MODULEDB_DIR}/moduledb;
fi;
if ! grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb; then
einfo "Adding module to moduledb.";
echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb;
fi
}
update_modules ()
{
debug-print-function ${FUNCNAME} $*;
if [ -x /sbin/update-modules ] && grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* > /dev/null 2>&1; then
ebegin "Updating modules.conf";
/sbin/update-modules;
eend $?;
else
if [ -x /sbin/update-modules ] && grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* > /dev/null 2>&1; then
ebegin "Updating modules.conf";
/sbin/update-modules;
eend $?;
fi;
fi
}
use_m ()
{
debug-print-function ${FUNCNAME} $*;
get_version;
[ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && return 0 || return 1
}
validate_desktop_entries ()
{
if [[ -x /usr/bin/desktop-file-validate ]]; then
einfo "Checking desktop entry validity";
local directories="";
for d in /usr/share/applications $@;
do
[[ -d ${D}${d} ]] && directories="${directories} ${D}${d}";
done;
if [[ -n ${directories} ]]; then
for FILE in $(find ${directories} -name "*\.desktop" -not -path '*.hidden*' | sort -u 2>/dev/null);
do
local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
[[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:};
done;
fi;
echo "";
else
einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
fi
}
version_compare ()
{
__versionator_shopt_toggle on;
local ver_a=${1} ver_b=${2} parts_a parts_b cur_idx_a=0 cur_idx_b=0;
parts_a=($(get_all_version_components "${ver_a}" ));
parts_b=($(get_all_version_components "${ver_b}" ));
local inf_loop=0;
while true; do
inf_loop=$(( ${inf_loop} + 1 ));
[[ ${inf_loop} -gt 20 ]] && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
local cur_tok_a=${parts_a[${cur_idx_a}]};
local cur_tok_b=${parts_b[${cur_idx_b}]};
if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
cur_idx_a=$(( ${cur_idx_a} + 1 ));
[[ ${parts_a[${cur_idx_a}]} == "." ]] && cur_idx_a=$(( ${cur_idx_a} + 1 ));
else
cur_tok_a="";
fi;
if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
cur_idx_b=$(( ${cur_idx_b} + 1 ));
[[ ${parts_b[${cur_idx_b}]} == "." ]] && cur_idx_b=$(( ${cur_idx_b} + 1 ));
else
cur_tok_b="";
fi;
[[ -z ${cur_tok_a} ]] && [[ -z ${cur_tok_b} ]] && break;
cur_tok_a=${cur_tok_a##+(0)};
cur_tok_b=${cur_tok_b##+(0)};
[[ -z ${cur_tok_a} ]] && cur_tok_a=0;
[[ -z ${cur_tok_b} ]] && cur_tok_b=0;
[[ ${cur_tok_a} -lt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 1;
[[ ${cur_tok_a} -gt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 3;
done;
local letter_a=;
letter_a=${parts_a[${cur_idx_a}]};
if [[ ${#letter_a} -eq 1 ]] && [[ -z ${letter_a/[a-z]} ]]; then
cur_idx_a=$(( ${cur_idx_a} + 1 ));
else
letter_a="@";
fi;
local letter_b=;
letter_b=${parts_b[${cur_idx_b}]};
if [[ ${#letter_b} -eq 1 ]] && [[ -z ${letter_b/[a-z]} ]]; then
cur_idx_b=$(( ${cur_idx_b} + 1 ));
else
letter_b="@";
fi;
[[ ${letter_a} < ${letter_b} ]] && __versionator_shopt_toggle off && return 1;
[[ ${letter_a} > ${letter_b} ]] && __versionator_shopt_toggle off && return 3;
local suffix rule part r_lt r_gt;
for rule in "alpha=1" "beta=1" "pre=1" "rc=1" "p=3" "r=3";
do
suffix=${rule%%=*};
r_lt=${rule##*=};
[[ ${r_lt} -eq 1 ]] && r_gt=3 || r_gt=1;
local suffix_a=;
for part in ${parts_a[@]};
do
[[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_a=${part#${suffix}}0;
done;
local suffix_b=;
for part in ${parts_b[@]};
do
[[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_b=${part#${suffix}}0;
done;
[[ -z ${suffix_a} ]] && [[ -z ${suffix_b} ]] && continue;
[[ -z ${suffix_a} ]] && __versionator_shopt_toggle off && return ${r_gt};
[[ -z ${suffix_b} ]] && __versionator_shopt_toggle off && return ${r_lt};
suffix_a=${suffix_a##+(0)};
suffix_a=${suffix_a:-0};
suffix_b=${suffix_b##+(0)};
suffix_b=${suffix_b:-0};
[[ ${suffix_a} -lt ${suffix_b} ]] && __versionator_shopt_toggle off && return 1;
[[ ${suffix_a} -gt ${suffix_b} ]] && __versionator_shopt_toggle off && return 3;
done;
__versionator_shopt_toggle off;
return 2
}
version_is_at_least ()
{
__versionator_shopt_toggle on;
local want_s="$1" have_s="${2:-${PVR}}" r;
version_compare "${want_s}" "${have_s}";
r=$?;
case $r in
1 | 2)
__versionator_shopt_toggle off;
return 0
;;
3)
__versionator_shopt_toggle off;
return 1
;;
*)
__versionator_shopt_toggle off;
die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
;;
esac;
__versionator_shopt_toggle off
}
version_sort ()
{
__versionator_shopt_toggle on;
local items= left=0;
items=($@);
while [[ ${left} -lt ${#items[@]} ]]; do
local lowest_idx=${left};
local idx=$(( ${lowest_idx} + 1 ));
while [[ ${idx} -lt ${#items[@]} ]]; do
version_compare "${items[${lowest_idx}]}" "${items[${idx}]}";
[[ $? -eq 3 ]] && lowest_idx=${idx};
idx=$(( ${idx} + 1 ));
done;
local tmp=${items[${lowest_idx}]};
items[${lowest_idx}]=${items[${left}]};
items[${left}]=${tmp};
left=$(( ${left} + 1 ));
done;
echo ${items[@]};
__versionator_shopt_toggle off
}
declare -x ALSA_CARDS=" ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci"
declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"
declare -x APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
declare -x ARCH="x86"
declare -x CBUILD="i686-pc-linux-gnu"
declare -x CDEFINE_default="__unix__"
declare -x CFLAGS="-O2 -march=i686 -pipe"
declare -x CFLAGS_default=""
declare -x CHOST="i686-pc-linux-gnu"
declare -x CHOST_default="i686-pc-linux-gnu"
declare -x CROSSCOMPILE_OPTS=""
declare -x CTARGET_default="i686-pc-linux-gnu"
declare -x CVS_RSH="ssh"
declare -x CXXFLAGS="-O2 -march=i686 -pipe"
declare -x DEFAULT_ABI="default"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -x EAPI="0"
declare -x ELIBC="glibc"
declare -x EXEOPTIONS="-m0755"
declare -x FEATURES="distlocks fixpackages parallel-fetch protect-owned sandbox sfperms strict unmerge-orphans userfetch"
declare -x GCC_SPECS=""
declare -x GDK_USE_XFT="1"
declare -x INHERITED="toolchain-funcs portability flag-o-matic versionator multilib libtool linux-info autotools linux-mod eutils"
declare -x INPUT_DEVICES="keyboard mouse"
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="default"
declare -x KEYWORDS="~alpha ~amd64 ~mips ~ppc ~ppc64 ~x86"
declare -x KV="2.6.25-gentoo-r8"
declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
declare -x LDFLAGS="-Wl,-O1"
declare -x LDFLAGS_default=""
declare -x LIBDIR_default="lib"
declare -x LIBOPTIONS="-m0644"
declare -x LICENSE="GPL-2"
declare -x MAKEOPTS="-j3"
declare -x MULTILIB_ABIS="default"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OPENGL_PROFILE="nvidia"
declare -x PKG_CONFIG_PATH="/usr/qt/3/lib/pkgconfig"
declare -x PORTAGE_COMPRESS_EXCLUDE_SUFFIXES="css gif htm[l]? jp[e]?g js pdf png"
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC KERNEL USERLAND"
declare -x PROPERTIES=""
declare -x PROVIDE="virtual/alsa"
declare -x QMAKESPEC="linux-g++"
declare -x QTDIR="/usr/qt/3"
declare -x RESTRICT=""
declare -x S="/var/tmp/portage/media-sound/alsa-driver-1.0.18a/work/alsa-driver-1.0.18a"
declare -x SANDBOX_DENY="/etc/ld.so.preload"
declare -x SANDBOX_PREDICT=":/dev/console:/dev/random:/proc/self/maps:/usr/lib/python2.0/:/usr/lib/python2.1/:/usr/lib/python2.2/:/usr/lib/python2.3/:/usr/lib/python2.4/:/usr/lib/python2.5/:/usr/lib/python3.0/:/var/db/aliases.db:/var/db/ethers.db:/var/db/group.db:/var/db/hosts.db:/var/db/netgroup.db:/var/db/netmasks.db:/var/db/networks.db:/var/db/passwd.db:/var/db/protocols.db:/var/db/rpc.db:/var/db/services.db:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.:"
declare -x SANDBOX_READ=":/:/dev/shm:/dev/stdin:/var/tmp:"
declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/shm/ngpt:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.bash_history:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.gconfd/lock:"
declare -x SGML_CATALOG_FILES="/etc/sgml/sgml-docbook.cat:/etc/sgml/sgml-docbook-3.1.cat:/etc/sgml/sgml-ent.cat:/etc/sgml/openjade-1.3.2.cat:/etc/sgml/dsssl-docbook-stylesheets.cat:/etc/sgml/sgml-lite.cat"
declare -x SLOT="0"
declare -x USE="alsa_cards_ali5451 alsa_cards_als4000 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_emu10k1 alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_hda-intel alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_maestro3 alsa_cards_trident alsa_cards_usb-audio alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_ymfpci elibc_glibc kernel_linux midi userland_GNU x86"
declare -x USERLAND="GNU"
declare -x VIDEO_CARDS=""
declare -x WANT_AUTOCONF="2.5"
declare -x WANT_AUTOMAKE="1.10"
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -x repository="gentoo"
^ permalink raw reply [flat|nested] 3+ messages in thread
* [gentoo-user] Re: Failed to emerge media-sound/alsa-driver-1.0.18a
2009-01-22 2:01 [gentoo-user] Failed to emerge media-sound/alsa-driver-1.0.18a Guillermo Garron
@ 2009-01-22 2:26 ` Guillermo Garron
2009-01-22 2:40 ` Guillermo Garron
1 sibling, 0 replies; 3+ messages in thread
From: Guillermo Garron @ 2009-01-22 2:26 UTC (permalink / raw
To: gentoo-user
[-- Attachment #1: Type: text/plain, Size: 1973 bytes --]
On Wed, Jan 21, 2009 at 10:01 PM, Guillermo Garron
<guillermo.fedora@gmail.com> wrote:
> Hi,
>
> I have tried to make a full upgrade of my system.
>
> Using
> emerge --update --newuse --deep world
>
> but I got this error:
> *********************************************************
> Failed to emerge media-sound/alsa-driver-1.0.18a, Log file:
>
>>>> '/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/build.log'
>
> * Messages for package media-sound/alsa-driver-1.0.18a:
>
> *
> * ERROR: media-sound/alsa-driver-1.0.18a failed.
> * Call stack:
> * ebuild.sh, line 49: Called src_compile
> * environment, line 3951: Called die
> * The specific snippet of code:
> * emake LDFLAGS="$(raw-ldflags)" HOSTCC="$(tc-getBUILD_CC)"
> CC="$(tc-getCC)" || die "Make Failed";
> * The die message:
> * Make Failed
> *
> * If you need support, post the topmost build error, and the call
> stack if relevant.
> * A complete build log is located at
> '/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/build.log'.
> * The ebuild environment file is located at
> '/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/environment'.
> *
> ***************************************************************************
>
> I am not new to Linux, but I use mostly Debian, and I am new to
> Gentoo, so actually I am stucked here for two weeks :(.
>
> I am also attaching the files it mentions in the above message.
Sorry somehow it does not attach one of the files.
here it goes.
>
> please help me.
>
> regards,
>
>
> --
> Guillermo Garron
> "Linux IS user friendly... It's just selective about who its friends are."
> (Using Gentoo, Debian, Crunchbang, Ubuntu)
> http://feeds.feedburner.com/go2linux
> http://www.go2linux.org
>
--
Guillermo Garron
"Linux IS user friendly... It's just selective about who its friends are."
(Using FC6, CentOS4.4 and Ubuntu 6.06)
http://feeds.feedburner.com/go2linux
http://www.go2linux.org
[-- Attachment #2: environment --]
[-- Type: application/octet-stream, Size: 160711 bytes --]
ALSA_CARDS=' ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci'
ALSA_PCM_PLUGINS='adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol'
APACHE2_MODULES='actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias'
ARCH=x86
AT_GNUCONF_UPDATE=no
AT_M4DIR=
CBUILD=i686-pc-linux-gnu
CDEFINE_default=__unix__
CFLAGS='-O2 -march=i686 -pipe'
CFLAGS_default=
CHOST=i686-pc-linux-gnu
CHOST_default=i686-pc-linux-gnu
CROSSCOMPILE_OPTS=
CTARGET_default=i686-pc-linux-gnu
CVS_RSH=ssh
CXXFLAGS='-O2 -march=i686 -pipe'
DEFAULT_ABI=default
DEPEND=$'virtual/modutils\n\t>=media-sound/alsa-headers-1.0.17\n\tvirtual/linux-sources\n\tsys-apps/debianutils =sys-devel/automake-1.10*\n\t>=sys-devel/autoconf-2.61 sys-devel/libtool kernel_linux? ( virtual/linux-sources ) kernel_linux? ( virtual/modutils )\n\tsys-apps/sed kernel_linux? ( virtual/linux-sources )'
DESCRIPTION='Advanced Linux Sound Architecture kernel modules'
DESTTREE=/usr
DIROPTIONS=-m0755
EAPI=0
ELIBC=glibc
ELIBTOOL_VERSION=2.0.2
ELT_APPLIED_PATCHES=
ELT_LTMAIN_SH=
ELT_PATCH_DIR=/usr/portage/eclass/ELT-patches
EPATCH_EXCLUDE=
EPATCH_FORCE=no
EPATCH_MULTI_MSG='Applying various patches (bugfixes/updates) ...'
EPATCH_OPTS='-g0 -E --no-backup-if-mismatch'
EPATCH_SINGLE_MSG=
EPATCH_SOURCE=/var/tmp/portage/media-sound/alsa-driver-1.0.18a/work/patch
EPATCH_SUFFIX=patch.bz2
EXEOPTIONS=-m0755
FEATURES='distlocks fixpackages parallel-fetch protect-owned sandbox sfperms strict unmerge-orphans userfetch'
GCC_SPECS=
GDK_USE_XFT=1
HOMEPAGE=http://www.alsa-project.org/
INHERITED='toolchain-funcs portability flag-o-matic versionator multilib libtool linux-info autotools linux-mod eutils'
INPUT_DEVICES='keyboard mouse'
INSDESTTREE=
INSOPTIONS=-m0644
IUSE='oss debug midi alsa_cards_seq-dummy alsa_cards_dummy alsa_cards_virmidi alsa_cards_mtpav alsa_cards_mts64 alsa_cards_serial-u16550 alsa_cards_mpu401 alsa_cards_loopback alsa_cards_portman2x4 alsa_cards_ad1848-lib alsa_cards_adlib alsa_cards_ad1816a alsa_cards_ad1848 alsa_cards_als100 alsa_cards_azt2320 alsa_cards_cmi8330 alsa_cards_cs4231 alsa_cards_cs4232 alsa_cards_cs4236 alsa_cards_dt019x alsa_cards_es968 alsa_cards_es1688 alsa_cards_es18xx alsa_cards_gusclassic alsa_cards_gusextreme alsa_cards_gusmax alsa_cards_interwave alsa_cards_interwave-stb alsa_cards_opl3sa2 alsa_cards_opti92x-ad1848 alsa_cards_opti92x-cs4231 alsa_cards_opti93x alsa_cards_miro alsa_cards_sb8 alsa_cards_sb16 alsa_cards_sbawe alsa_cards_sgalaxy alsa_cards_sscape alsa_cards_wavefront alsa_cards_pc98-cs4232 alsa_cards_msnd-pinnacle alsa_cards_ad1889 alsa_cards_als300 alsa_cards_als4000 alsa_cards_ali5451 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_au8810 alsa_cards_au8820 alsa_cards_au8830 alsa_cards_azt3328 alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_cs4281 alsa_cards_cs46xx alsa_cards_cs5535audio alsa_cards_darla20 alsa_cards_gina20 alsa_cards_layla20 alsa_cards_darla24 alsa_cards_gina24 alsa_cards_layla24 alsa_cards_mona alsa_cards_mia alsa_cards_echo3g alsa_cards_indigo alsa_cards_indigoio alsa_cards_indigodj alsa_cards_emu10k1 alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_fm801-tea575x alsa_cards_hda-intel alsa_cards_hdsp alsa_cards_hdspm alsa_cards_ice1712 alsa_cards_ice1724 alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_korg1212 alsa_cards_maestro3 alsa_cards_mixart alsa_cards_nm256 alsa_cards_pcxhr alsa_cards_riptide alsa_cards_rme32 alsa_cards_rme96 alsa_cards_rme9652 alsa_cards_sonicvibes alsa_cards_trident alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_vx222 alsa_cards_ymfpci alsa_cards_pdplus alsa_cards_asihpi alsa_cards_powermac alsa_cards_aoa alsa_cards_aoa-fabric-layout alsa_cards_aoa-onyx alsa_cards_aoa-tas alsa_cards_aoa-toonie alsa_cards_aoa-soundbus alsa_cards_aoa-soundbus-i2s alsa_cards_sa11xx-uda1341 alsa_cards_armaaci alsa_cards_s3c2410 alsa_cards_pxa2xx-i2sound alsa_cards_au1x00 alsa_cards_usb-audio alsa_cards_usb-usx2y alsa_cards_usb-us122l alsa_cards_vxpocket alsa_cards_pdaudiocf alsa_cards_sun-amd7930 alsa_cards_sun-cs4231 alsa_cards_sun-dbri alsa_cards_harmony alsa_cards_soc alsa_cards_at91-soc alsa_cards_at91-soc-eti-b1-wm8731 alsa_cards_pxa2xx-soc alsa_cards_pxa2xx-soc-corgi alsa_cards_pxa2xx-soc-spitz alsa_cards_pxa2xx-soc-poodle alsa_cards_pxa2xx-soc-tosa alsa_cards_hifier alsa_cards_ml403-ac97cr alsa_cards_oxygen alsa_cards_pxa2xx-soc-e800 alsa_cards_sis7019 alsa_cards_virtuoso kernel_linux'
IUSE_CARDS=$'seq-dummy dummy virmidi mtpav mts64 serial-u16550 mpu401\nloopback portman2x4 ad1848-lib adlib ad1816a ad1848\nals100 azt2320 cmi8330 cs4231 cs4232 cs4236 dt019x es968 es1688 es18xx\ngusclassic gusextreme gusmax interwave interwave-stb opl3sa2\nopti92x-ad1848 opti92x-cs4231 opti93x miro sb8 sb16 sbawe sgalaxy\nsscape wavefront pc98-cs4232 msnd-pinnacle ad1889 als300 als4000\nali5451 atiixp atiixp-modem au8810 au8820 au8830 azt3328 bt87x ca0106\ncmipci cs4281 cs46xx cs5535audio darla20 gina20 layla20 darla24 gina24\nlayla24 mona mia echo3g indigo indigoio indigodj emu10k1 emu10k1x\nens1370 ens1371 es1938 es1968 fm801 fm801-tea575x hda-intel hdsp hdspm\nice1712 ice1724 intel8x0 intel8x0m korg1212 maestro3 mixart nm256\npcxhr riptide rme32 rme96 rme9652 sonicvibes trident via82xx\nvia82xx-modem vx222 ymfpci pdplus asihpi powermac aoa\naoa-fabric-layout aoa-onyx aoa-tas aoa-toonie aoa-soundbus\naoa-soundbus-i2s sa11xx-uda1341 armaaci s3c2410 pxa2xx-i2sound au1x00\nusb-audio usb-usx2y usb-us122l vxpocket pdaudiocf sun-amd7930 sun-cs4231 sun-dbri\nharmony soc at91-soc at91-soc-eti-b1-wm8731 pxa2xx-soc\npxa2xx-soc-corgi pxa2xx-soc-spitz pxa2xx-soc-poodle pxa2xx-soc-tosa hifier\nml403-ac97cr oxygen pxa2xx-soc-e800 sis7019 virtuoso'
KERNEL=linux
KERNEL_ABI=default
KERNEL_DIR=/usr/src/linux
KEYWORDS='~alpha ~amd64 ~mips ~ppc ~ppc64 ~x86'
KV=2.6.25-gentoo-r8
KV_DIR=/usr/src/linux
KV_EXTRA=-gentoo-r8
KV_FULL=2.6.25-gentoo-r8
KV_LOCAL=
KV_MAJOR=2
KV_MINOR=6
KV_OBJ=ko
KV_OUT_DIR=/lib/modules/2.6.25-gentoo-r8/build
KV_PATCH=25
LCD_DEVICES='bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text'
LDFLAGS=-Wl,-O1
LDFLAGS_default=
LIBDIR_default=lib
LIBOPTIONS=-m0644
LICENSE=GPL-2
MAKEOPTS=-j3
MULTILIB_ABIS=default
MY_P=alsa-driver-1.0.18a
NETBEANS='apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml'
OPENGL_PROFILE=nvidia
OUTPUT_DIR=/lib/modules/2.6.25-gentoo-r8/build
PDEPEND=' '
PKG_CONFIG_PATH=/usr/qt/3/lib/pkgconfig
PORTAGE_COMPRESS_EXCLUDE_SUFFIXES='css gif htm[l]? jp[e]?g js pdf png'
PROFILE_ONLY_VARIABLES='ARCH ELIBC KERNEL USERLAND'
PROPERTIES=
PROVIDE=virtual/alsa
QMAKESPEC=linux-g++
QTDIR=/usr/qt/3
RDEPEND='virtual/modutils kernel_linux? ( virtual/modutils ) '
RESTRICT=
S=/var/tmp/portage/media-sound/alsa-driver-1.0.18a/work/alsa-driver-1.0.18a
SANDBOX_DENY=/etc/ld.so.preload
SANDBOX_PREDICT=:/dev/console:/dev/random:/proc/self/maps:/usr/lib/python2.0/:/usr/lib/python2.1/:/usr/lib/python2.2/:/usr/lib/python2.3/:/usr/lib/python2.4/:/usr/lib/python2.5/:/usr/lib/python3.0/:/var/db/aliases.db:/var/db/ethers.db:/var/db/group.db:/var/db/hosts.db:/var/db/netgroup.db:/var/db/netmasks.db:/var/db/networks.db:/var/db/passwd.db:/var/db/protocols.db:/var/db/rpc.db:/var/db/services.db:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.:
SANDBOX_READ=:/:/dev/shm:/dev/stdin:/var/tmp:
SANDBOX_WRITE=:/dev/console:/dev/fd:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/shm/ngpt:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.bash_history:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.gconfd/lock:
SGML_CATALOG_FILES=/etc/sgml/sgml-docbook.cat:/etc/sgml/sgml-docbook-3.1.cat:/etc/sgml/sgml-ent.cat:/etc/sgml/openjade-1.3.2.cat:/etc/sgml/dsssl-docbook-stylesheets.cat:/etc/sgml/sgml-lite.cat
SLOT=0
SRC_URI=mirror://alsaproject/driver/alsa-driver-1.0.18a.tar.bz2
USE='alsa_cards_ali5451 alsa_cards_als4000 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_emu10k1 alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_hda-intel alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_maestro3 alsa_cards_trident alsa_cards_usb-audio alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_ymfpci elibc_glibc kernel_linux midi userland_GNU x86'
USERLAND=GNU
VIDEO_CARDS=
WANT_AUTOCONF=2.5
WANT_AUTOMAKE=1.10
_=PKG_INSTALL_MASK
_E_DOCDESTTREE_=
_E_EXEDESTTREE_=
___ECLASS_RECUR_MULTILIB=yes
___ECLASS_RECUR_TOOLCHAIN_FUNCS=yes
_pipestatus='0 0'
card=ymfpci
conf=alsa-driver-1.0.18a-r0
iuse_card=virtuoso
repository=gentoo
str='use_m: entering function'
ELT_find_ltmain_sh ()
{
local x=;
local dirlist=;
for x in $(find "${S}" -name 'ltmain.sh');
do
dirlist="${dirlist} ${x%/*}";
done;
echo "${dirlist}"
}
ELT_libtool_version ()
{
local ltmain_sh=$1;
local version=;
version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); echo "${VERSION}");
[[ -z ${version} ]] && version="0";
echo "${version}"
}
ELT_try_and_apply_patch ()
{
local ret=0;
local file=$1;
local patch=$2;
if patch -p0 --dry-run "${file}" "${patch}" >&"${T}/elibtool.log"; then
einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ...";
patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >&"${T}/elibtool.log";
ret=$?;
export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}";
else
ret=1;
fi;
return "${ret}"
}
ELT_walk_patches ()
{
local x=;
local y=;
local ret=1;
local file=$1;
local patch_set=$2;
local patch_dir=;
local rem_int_dep=$3;
if [[ -n ${patch_set} ]]; then
if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]]; then
patch_dir="${ELT_PATCH_DIR}/${patch_set}";
else
return "${ret}";
fi;
for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r);
do
if [[ -n ${x} && -f ${x} ]]; then
if [[ -n ${rem_int_dep} ]]; then
sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > "${T}/$$.rem_int_deps.patch";
x="${T}/$$.rem_int_deps.patch";
fi;
if ELT_try_and_apply_patch "${file}" "${x}"; then
ret=0;
break;
fi;
fi;
done;
fi;
return "${ret}"
}
VER_major ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
echo "${VER%%[^[:digit:]]*}"
}
VER_micro ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
VER=${VER#*.*.};
echo "${VER%%[^[:digit:]]*}"
}
VER_minor ()
{
[[ -z $1 ]] && return 1;
local VER=$@;
VER=${VER#*.};
echo "${VER%%[^[:digit:]]*}"
}
VER_to_int ()
{
[[ -z $1 ]] && return 1;
local VER_MAJOR=$(VER_major "$1");
local VER_MINOR=$(VER_minor "$1");
local VER_MICRO=$(VER_micro "$1");
local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
if [[ ${VER_int} -ge 65536 ]]; then
echo "${VER_int}";
return 0;
fi;
echo 1;
return 1
}
__versionator__test_version_compare ()
{
__versionator_shopt_toggle on;
local lt=1 eq=2 gt=3 p q;
function __versionator__test_version_compare_t ()
{
version_compare "${1}" "${3}";
local r=$?;
[[ ${r} -eq ${2} ]] || echo "FAIL: ${@} (got ${r} exp ${2})"
};
echo "
0 $lt 1
1 $lt 2
2 $gt 1
2 $eq 2
0 $eq 0
10 $lt 20
68 $eq 068
068 $gt 67
068 $lt 69
1.0 $lt 2.0
2.0 $eq 2.0
2.0 $gt 1.0
1.0 $gt 0.0
0.0 $eq 0.0
0.0 $lt 1.0
0.1 $lt 0.2
0.2 $eq 0.2
0.3 $gt 0.2
1.2 $lt 2.1
2.1 $gt 1.2
1.2.3 $lt 1.2.4
1.2.4 $gt 1.2.3
1.2.0 $eq 1.2
1.2.1 $gt 1.2
1.2 $lt 1.2.1
1.2b $eq 1.2b
1.2b $lt 1.2c
1.2b $gt 1.2a
1.2b $gt 1.2
1.2 $lt 1.2a
1.3 $gt 1.2a
1.3 $lt 1.3a
1.0_alpha7 $lt 1.0_beta7
1.0_beta $lt 1.0_pre
1.0_pre5 $lt 1.0_rc2
1.0_rc2 $lt 1.0
1.0_p1 $gt 1.0
1.0_p1-r1 $gt 1.0_p1
1.0_alpha6-r1 $gt 1.0_alpha6
1.0_beta6-r1 $gt 1.0_alpha6-r2
1.0_pre1 $lt 1.0-p1
1.0p $gt 1.0_p1
1.0r $gt 1.0-r1
1.6.15 $gt 1.6.10-r2
1.6.10-r2 $lt 1.6.15
" | while read a b c; do
[[ -z "${a}${b}${c}" ]] && continue;
__versionator__test_version_compare_t "${a}" "${b}" "${c}";
done;
for q in "alpha beta pre rc=${lt};${gt}" "p r=${gt};${lt}";
do
for p in ${q%%=*};
do
local c=${q##*=};
local alt=${c%%;*} agt=${c##*;};
__versionator__test_version_compare_t "1.0" $agt "1.0_${p}";
__versionator__test_version_compare_t "1.0" $agt "1.0_${p}1";
__versionator__test_version_compare_t "1.0" $agt "1.0_${p}068";
__versionator__test_version_compare_t "2.0_${p}" $alt "2.0";
__versionator__test_version_compare_t "2.0_${p}1" $alt "2.0";
__versionator__test_version_compare_t "2.0_${p}068" $alt "2.0";
__versionator__test_version_compare_t "1.0_${p}" $eq "1.0_${p}";
__versionator__test_version_compare_t "0.0_${p}" $lt "0.0_${p}1";
__versionator__test_version_compare_t "666_${p}3" $gt "666_${p}";
__versionator__test_version_compare_t "1_${p}7" $lt "1_${p}8";
__versionator__test_version_compare_t "1_${p}7" $eq "1_${p}7";
__versionator__test_version_compare_t "1_${p}7" $gt "1_${p}6";
__versionator__test_version_compare_t "1_${p}09" $eq "1_${p}9";
done;
done;
for p in "-r" "_p";
do
__versionator__test_version_compare_t "7.2${p}1" $lt "7.2${p}2";
__versionator__test_version_compare_t "7.2${p}2" $gt "7.2${p}1";
__versionator__test_version_compare_t "7.2${p}3" $gt "7.2${p}2";
__versionator__test_version_compare_t "7.2${p}2" $lt "7.2${p}3";
done;
__versionator_shopt_toggle off
}
__versionator_shopt_toggle ()
{
VERSIONATOR_RECURSION=${VERSIONATOR_RECURSION:-0};
case "$1" in
"on")
if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then
VERSIONATOR_OLD_EXTGLOB=$(shopt -p extglob);
shopt -s extglob;
fi;
VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION + 1 ))
;;
"off")
VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION - 1 ));
if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then
eval $VERSIONATOR_OLD_EXTGLOB;
fi
;;
esac;
return 0
}
_cdrom_locate_file_on_cd ()
{
local mline="";
local showedmsg=0 showjolietmsg=0;
while [[ -z ${CDROM_ROOT} ]]; do
local i=0;
local -a cdset=(${*//:/ });
if [[ -n ${CDROM_SET} ]]; then
cdset=(${cdset[${CDROM_SET}]});
fi;
while [[ -n ${cdset[${i}]} ]]; do
local dir=$(dirname ${cdset[${i}]});
local file=$(basename ${cdset[${i}]});
local point= node= fs= foo=;
while read point node fs foo; do
[[ " cd9660 iso9660 udf " != *" ${fs} "* ]] && ! [[ ${fs} == "subfs" && ",${opts}," == *",fs=cdfss,"* ]] && continue;
point=${point//\040/ };
[[ ! -d ${point}/${dir} ]] && continue;
[[ -z $(find "${point}/${dir}" -maxdepth 1 -iname "${file}") ]] && continue;
export CDROM_ROOT=${point};
export CDROM_SET=${i};
export CDROM_MATCH=${cdset[${i}]};
return;
done <<< "$(get_mounts)";
((++i));
done;
echo;
if [[ ${showedmsg} -eq 0 ]]; then
if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
if [[ -z ${CDROM_NAME} ]]; then
einfo "Please insert+mount the cdrom for ${PN} now !";
else
einfo "Please insert+mount the ${CDROM_NAME} cdrom now !";
fi;
else
if [[ -z ${CDROM_NAME_1} ]]; then
einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !";
else
local var="CDROM_NAME_${CDROM_CURRENT_CD}";
einfo "Please insert+mount the ${!var} cdrom now !";
fi;
fi;
showedmsg=1;
fi;
einfo "Press return to scan for the cd again";
einfo "or hit CTRL+C to abort the emerge.";
echo;
if [[ ${showjolietmsg} -eq 0 ]]; then
showjolietmsg=1;
else
ewarn "If you are having trouble with the detection";
ewarn "of your CD, it is possible that you do not have";
ewarn "Joliet support enabled in your kernel. Please";
ewarn "check that CONFIG_JOLIET is enabled in your kernel.";
ebeep 5;
fi;
read || die "something is screwed with your system";
done
}
_elibtoolize ()
{
local opts;
[[ -n $(autotools_check_macro AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT) ]] || return 0;
[[ -f GNUmakefile.am || -f Makefile.am ]] && opts="--automake";
[[ "${USERLAND}" == "Darwin" ]] && LIBTOOLIZE="glibtoolize";
autotools_run_tool ${LIBTOOLIZE:-libtoolize} "$@" ${opts};
eaclocal
}
_filter-hardened ()
{
local f;
for f in "$@";
do
case "${f}" in
-fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie)
gcc-specs-pie || continue;
is-flagq -nopie || append-flags -nopie
;;
-fstack-protector)
gcc-specs-ssp || continue;
is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector)
;;
-fstack-protector-all)
gcc-specs-ssp-to-all || continue;
is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all)
;;
-fno-strict-overflow)
gcc-specs-nostrict || continue;
is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow)
;;
esac;
done
}
_filter-var ()
{
local f x VAR VAL;
declare -a new;
VAR=$1;
shift;
eval VAL=\${${VAR}};
for f in ${VAL};
do
for x in "$@";
do
[[ ${f} == ${x} ]] && continue 2;
done;
eval new\[\${\#new\[@]}]=\${f};
done;
eval export ${VAR}=\${new\[*]}
}
_gcc-install-dir ()
{
echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null | awk '$1=="install:" {print $2}')"
}
_gcc-specs-directive_raw ()
{
local cc=$(tc-getCC);
local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN { pspec=""; spec=""; outside=1 }
$1=="*"directive":" { pspec=spec; spec=""; outside=0; next }
outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
{ spec=spec $0 }
END { print spec }';
return 0
}
_gcc-specs-exists ()
{
[[ -f $(_gcc-install-dir)/$1 ]]
}
_is_flagq ()
{
local x;
for x in ${!1};
do
[[ ${x} == $2 ]] && return 0;
done;
return 1
}
append-cppflags ()
{
[[ -z $* ]] && return 0;
export CPPFLAGS="${CPPFLAGS} $*";
return 0
}
append-cxxflags ()
{
[[ -z $* ]] && return 0;
export CXXFLAGS="${CXXFLAGS} $*";
return 0
}
append-fflags ()
{
[[ -z $* ]] && return 0;
export FFLAGS="${FFLAGS} $*";
export FCFLAGS="${FCFLAGS} $*";
return 0
}
append-flags ()
{
[[ -z $* ]] && return 0;
export CFLAGS="${CFLAGS} $*";
export CXXFLAGS="${CXXFLAGS} $*";
export FFLAGS="${FFLAGS} $*";
export FCFLAGS="${FCFLAGS} $*";
return 0
}
append-ldflags ()
{
[[ -z $* ]] && return 0;
local flag;
for flag in "$@";
do
[[ ${flag} == -l* ]] && ewarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS";
done;
export LDFLAGS="${LDFLAGS} $*";
return 0
}
append-lfs-flags ()
{
[[ -n $@ ]] && die "append-lfs-flags takes no arguments";
append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
}
autotools_check_macro ()
{
[[ -f configure.ac || -f configure.in ]] || return 0;
local macro;
for macro in "$@";
do
WANT_AUTOCONF="2.5" autoconf --trace="${macro}" 2> /dev/null;
done;
return 0
}
autotools_get_auxdir ()
{
local auxdir_scan_out;
auxdir_scan_out=$(autotools_check_macro "AC_CONFIG_AUX_DIR");
[[ -n ${auxdir_scan_out} ]] || return 0;
echo ${auxdir_scan_out} | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) {
if (match($0, /AC_CONFIG_AUX_DIR:(.*)$/, res))
print res[1]
}' | uniq;
return 0
}
autotools_get_subdirs ()
{
local subdirs_scan_out;
subdirs_scan_out=$(autotools_check_macro "AC_CONFIG_SUBDIRS");
[[ -n ${subdirs_scan_out} ]] || return 0;
echo "${subdirs_scan_out}" | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) {
if (match($0, /AC_CONFIG_SUBDIRS:(.*)$/, res))
print res[1]
}' | uniq;
return 0
}
autotools_run_tool ()
{
if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase";
fi;
local STDERR_TARGET="${T}/$$.out";
local ris;
printf "***** $1 *****\n***** $*\n\n" > "${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}";
ebegin "Running $@";
"$@" >> "${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}" 2>&1;
ris=$?;
eend ${ris};
if [[ ${ris} != 0 && ${NO_FAIL} != 1 ]]; then
echo;
eerror "Failed Running $1 !";
eerror;
eerror "Include in your bugreport the contents of:";
eerror;
eerror " ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}";
echo;
die "Failed Running $1 !";
fi
}
bindnow-flags ()
{
ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild"
}
built_with_use ()
{
local hidden="no";
if [[ $1 == "--hidden" ]]; then
hidden="yes";
shift;
fi;
local missing_action="die";
if [[ $1 == "--missing" ]]; then
missing_action=$2;
shift;
shift;
case ${missing_action} in
true | false | die)
;;
*)
die "unknown action '${missing_action}'"
;;
esac;
fi;
local opt=$1;
[[ ${opt:0:1} = "-" ]] && shift || opt="-a";
local PKG=$(best_version $1);
[[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
shift;
local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE;
local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE;
if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
case ${missing_action} in
true)
return 0
;;
false)
return 1
;;
die)
die "Unable to determine what USE flags $PKG was built with"
;;
esac;
fi;
if [[ ${hidden} == "no" ]]; then
local IUSE_BUILT=($(<"${IUSEFILE}"));
local expand;
for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
do
if [[ $1 == ${expand}_* ]]; then
expand="";
break;
fi;
done;
if [[ -n ${expand} ]]; then
if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
case ${missing_action} in
true)
return 0
;;
false)
return 1
;;
die)
die "$PKG does not actually support the $1 USE flag!"
;;
esac;
fi;
fi;
fi;
local USE_BUILT=$(<${USEFILE});
while [[ $# -gt 0 ]]; do
if [[ ${opt} = "-o" ]]; then
has $1 ${USE_BUILT} && return 0;
else
has $1 ${USE_BUILT} || return 1;
fi;
shift;
done;
[[ ${opt} = "-a" ]]
}
cdrom_get_cds ()
{
local cdcnt=0;
local f=;
for f in "$@";
do
((++cdcnt));
export CDROM_CHECK_${cdcnt}="$f";
done;
export CDROM_TOTAL_CDS=${cdcnt};
export CDROM_CURRENT_CD=1;
if [[ -n ${CD_ROOT}${CD_ROOT_1} ]]; then
local var=;
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
var="CD_ROOT_${cdcnt}";
[[ -z ${!var} ]] && var="CD_ROOT";
if [[ -z ${!var} ]]; then
eerror "You must either use just the CD_ROOT";
eerror "or specify ALL the CD_ROOT_X variables.";
eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables.";
die "could not locate CD_ROOT_${cdcnt}";
fi;
done;
export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}};
einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}";
export CDROM_SET=-1;
for f in ${CDROM_CHECK_1//:/ };
do
((++CDROM_SET));
[[ -e ${CD_ROOT}/${f} ]] && break;
done;
export CDROM_MATCH=${f};
return;
fi;
if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}";
echo;
einfo "If you do not have the CD, but have the data files";
einfo "mounted somewhere on your filesystem, just export";
einfo "the variable CD_ROOT so that it points to the";
einfo "directory containing the files.";
echo;
einfo "For example:";
einfo "export CD_ROOT=/mnt/cdrom";
echo;
else
if [[ -n ${CDROM_NAME_SET} ]]; then
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}";
done;
fi;
einfo "This package will need access to ${CDROM_TOTAL_CDS} cds.";
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
var="CDROM_NAME_${cdcnt}";
[[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}";
done;
echo;
einfo "If you do not have the CDs, but have the data files";
einfo "mounted somewhere on your filesystem, just export";
einfo "the following variables so they point to the right place:";
einfon "";
cdcnt=0;
while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
((++cdcnt));
echo -n " CD_ROOT_${cdcnt}";
done;
echo;
einfo "Or, if you have all the files in the same place, or";
einfo "you only have one cdrom, you can export CD_ROOT";
einfo "and that place will be used as the same data source";
einfo "for all the CDs.";
echo;
einfo "For example:";
einfo "export CD_ROOT_1=/mnt/cdrom";
echo;
fi;
export CDROM_SET="";
export CDROM_CURRENT_CD=0;
cdrom_load_next_cd
}
cdrom_load_next_cd ()
{
local var;
((++CDROM_CURRENT_CD));
unset CDROM_ROOT;
var=CD_ROOT_${CDROM_CURRENT_CD};
[[ -z ${!var} ]] && var="CD_ROOT";
if [[ -z ${!var} ]]; then
var="CDROM_CHECK_${CDROM_CURRENT_CD}";
_cdrom_locate_file_on_cd ${!var};
else
export CDROM_ROOT=${!var};
fi;
einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
}
check_extra_config ()
{
local config negate die error reworkmodulenames;
local soft_errors_count=0 hard_errors_count=0 config_required=0;
get_version;
for config in ${CONFIG_CHECK};
do
if [[ "${config:0:1}" != "~" ]]; then
config_required=1;
break;
fi;
done;
if [[ ${config_required} == 0 ]]; then
if ! linux_config_exists; then
return 0;
fi;
else
require_configured_kernel;
fi;
einfo "Checking for suitable kernel configuration options...";
for config in ${CONFIG_CHECK};
do
die=1;
error=0;
negate=0;
reworkmodulenames=0;
if [[ ${config:0:1} == "~" ]]; then
die=0;
config=${config:1};
else
if [[ ${config:0:1} == "@" ]]; then
die=0;
reworkmodulenames=1;
config=${config:1};
fi;
fi;
if [[ ${config:0:1} == "!" ]]; then
negate=1;
config=${config:1};
fi;
if [[ ${negate} == 1 ]]; then
linux_chkconfig_present ${config} && error=2;
else
if [[ ${reworkmodulenames} == 1 ]]; then
local temp_config="${config//*:}" i n;
config="${config//:*}";
if linux_chkconfig_present ${config}; then
for i in ${MODULE_NAMES};
do
n="${i//${temp_config}}";
[[ -z ${n//\(*} ]] && MODULE_IGNORE="${MODULE_IGNORE} ${temp_config}";
done;
error=2;
fi;
else
linux_chkconfig_present ${config} || error=1;
fi;
fi;
if [[ ${error} > 0 ]]; then
local report_func="eerror" local_error;
local_error="ERROR_${config}";
local_error="${!local_error}";
if [[ -z "${local_error}" ]]; then
local_error="${config}_ERROR";
local_error="${!local_error}";
fi;
if [[ ${die} == 0 && -z "${local_error}" ]]; then
local_error="WARNING_${config}";
local_error="${!local_error}";
if [[ -n "${local_error}" ]]; then
report_func="ewarn";
fi;
fi;
if [[ -z "${local_error}" ]]; then
[[ ${error} == 1 ]] && local_error="is not set when it should be." || local_error="should not be set. But it is.";
local_error="CONFIG_${config}:\t ${local_error}";
fi;
if [[ ${die} == 0 ]]; then
${report_func} " ${local_error}";
soft_errors_count=$[soft_errors_count + 1];
else
${report_func} " ${local_error}";
hard_errors_count=$[hard_errors_count + 1];
fi;
fi;
done;
if [[ ${hard_errors_count} > 0 ]]; then
eerror "Please check to make sure these options are set correctly.";
eerror "Failure to do so may cause unexpected problems.";
eerror "Once you have satisfied these options, please try merging";
eerror "this package again.";
die "Incorrect kernel configuration options";
else
if [[ ${soft_errors_count} > 0 ]]; then
ewarn "Please check to make sure these options are set correctly.";
ewarn "Failure to do so may cause unexpected problems.";
else
eend 0;
fi;
fi
}
check_kernel_built ()
{
require_configured_kernel;
get_version;
if [ ! -f "${KV_OUT_DIR}/include/linux/version.h" ]; then
eerror "These sources have not yet been prepared.";
eerror "We cannot build against an unprepared tree.";
eerror "To resolve this, please type the following:";
eerror;
eerror "# cd ${KV_DIR}";
eerror "# make oldconfig";
eerror "# make modules_prepare";
eerror;
eerror "Then please try merging this module again.";
die "Kernel sources need compiling first";
fi
}
check_license ()
{
local lic=$1;
if [ -z "${lic}" ]; then
lic="${PORTDIR}/licenses/${LICENSE}";
else
if [ -e "${PORTDIR}/licenses/${lic}" ]; then
lic="${PORTDIR}/licenses/${lic}";
else
if [ -e "${PWD}/${lic}" ]; then
lic="${PWD}/${lic}";
else
if [ -e "${lic}" ]; then
lic="${lic}";
fi;
fi;
fi;
fi;
[ ! -f "${lic}" ] && die "Could not find requested license ${lic}";
local l="`basename ${lic}`";
local shopts=$-;
local alic;
set -o noglob;
for alic in ${ACCEPT_LICENSE};
do
if [[ ${alic} == ${l} ]]; then
set +o noglob;
set -${shopts};
return 0;
fi;
done;
set +o noglob;
set -$shopts;
local licmsg=$(emktemp);
cat > ${licmsg} <<-EOF
**********************************************************
The following license outlines the terms of use of this
package. You MUST accept this license for installation to
continue. When you are done viewing, hit 'q'. If you
CTRL+C out of this, the install will not run!
**********************************************************
EOF
cat ${lic} >> ${licmsg};
${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}";
einfon "Do you accept the terms of this license (${l})? [yes/no] ";
read alic;
case ${alic} in
yes | Yes | y | Y)
return 0
;;
*)
echo;
echo;
echo;
eerror "You MUST accept the license to continue! Exiting!";
die "Failed to accept license"
;;
esac
}
check_modules_supported ()
{
require_configured_kernel;
get_version;
if ! linux_chkconfig_builtin "MODULES"; then
eerror "These sources do not support loading external modules.";
eerror "to be able to use this module please enable \"Loadable modules support\"";
eerror "in your kernel, recompile and then try merging this module again.";
die "No support for external modules in ${KV_FULL} config";
fi
}
check_vermagic ()
{
debug-print-function ${FUNCNAME} $*;
local curr_gcc_ver=$(gcc -dumpversion);
local tmpfile old_chost old_gcc_ver result=0;
tmpfile=`find ${KV_DIR}/ -iname "*.o.cmd" -exec grep usr/lib/gcc {} \; -quit`;
tmpfile=${tmpfile//*usr/lib};
tmpfile=${tmpfile//\/include*};
old_chost=${tmpfile//*gcc\/};
old_chost=${old_chost//\/*};
old_gcc_ver=${tmpfile//*\/};
if [[ -z ${old_gcc_ver} || -z ${old_chost} ]]; then
ewarn "";
ewarn "Unable to detect what version of GCC was used to compile";
ewarn "the kernel. Build will continue, but you may experience problems.";
else
if [[ ${curr_gcc_ver} != ${old_gcc_ver} ]]; then
ewarn "";
ewarn "The version of GCC you are using (${curr_gcc_ver}) does";
ewarn "not match the version of GCC used to compile the";
ewarn "kernel (${old_gcc_ver}).";
result=1;
else
if [[ ${CHOST} != ${old_chost} ]]; then
ewarn "";
ewarn "The current CHOST (${CHOST}) does not match the chost";
ewarn "used when compiling the kernel (${old_chost}).";
result=1;
fi;
fi;
fi;
if [[ ${result} -gt 0 ]]; then
ewarn "";
ewarn "Build will not continue, because you will experience problems.";
ewarn "To fix this either change the version of GCC you wish to use";
ewarn "to match the kernel, or recompile the kernel first.";
die "GCC Version Mismatch.";
fi
}
check_zlibinflate ()
{
require_configured_kernel;
get_version;
local INFLATE;
local DEFLATE;
einfo "Determining the usability of ZLIB_INFLATE support in your kernel";
ebegin "checking ZLIB_INFLATE";
getfilevar_isbuiltin CONFIG_ZLIB_INFLATE ${KV_DIR}/.config;
eend $?;
[ "$?" != 0 ] && die;
ebegin "checking ZLIB_DEFLATE";
getfilevar_isbuiltin CONFIG_ZLIB_DEFLATE ${KV_DIR}/.config;
eend $?;
[ "$?" != 0 ] && die;
local LINENO_START;
local LINENO_END;
local SYMBOLS;
local x;
LINENO_END="$(grep -n 'CONFIG_ZLIB_INFLATE y' ${KV_DIR}/lib/Config.in | cut -d : -f 1)";
LINENO_START="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | grep -n 'if \[' | tail -n 1 | cut -d : -f 1)";
(( LINENO_AMOUNT = $LINENO_END - $LINENO_START ));
(( LINENO_END = $LINENO_END - 1 ));
SYMBOLS="$(head -n $LINENO_END ${KV_DIR}/lib/Config.in | tail -n $LINENO_AMOUNT | sed -e 's/^.*\(CONFIG_[^\" ]*\).*/\1/g;')";
for x in $SYMBOLS;
do
if [ "${!x}" = "y" ]; then
einfo "${x} ensures zlib is linked into your kernel - excellent";
return 0;
fi;
done;
eerror;
eerror "This kernel module requires ZLIB library support.";
eerror "You have enabled zlib support in your kernel, but haven't enabled";
eerror "enabled any option that will ensure that zlib is linked into your";
eerror "kernel.";
eerror;
eerror "Please ensure that you enable at least one of these options:";
eerror;
for x in $SYMBOLS;
do
eerror " * $x";
done;
eerror;
eerror "Please remember to recompile and install your kernel, and reboot";
eerror "into your new kernel before attempting to load this kernel module.";
die "Kernel doesn't include zlib support"
}
convert_to_m ()
{
debug-print-function ${FUNCNAME} $*;
if use_m; then
[ ! -f "${1}" ] && die "convert_to_m() requires a filename as an argument";
ebegin "Converting ${1/${WORKDIR}\//} to use M= instead of SUBDIRS=";
sed -i 's:SUBDIRS=:M=:g' ${1};
eend $?;
fi
}
create_ml_includes ()
{
local dest=$1;
shift;
local basedirs=$(create_ml_includes-listdirs "$@");
create_ml_includes-makedestdirs ${dest} ${basedirs};
local file;
for file in $(create_ml_includes-allfiles ${basedirs});
do
( echo "/* Autogenerated by create_ml_includes() in multilib.eclass */";
local dir;
for dir in ${basedirs};
do
if [[ -f ${D}/${dir}/${file} ]]; then
echo "";
local sym=$(create_ml_includes-sym_for_dir ${dir} "$@");
if [[ ${sym/=} != "${sym}" ]]; then
echo "#if ${sym}";
else
if [[ ${sym::1} == "!" ]]; then
echo "#ifndef ${sym:1}";
else
echo "#ifdef ${sym}";
fi;
fi;
echo "# include <$(create_ml_includes-absolute ${dir}/${file})>";
echo "#endif /* ${sym} */";
fi;
done ) > "${D}/${dest}/${file}";
done
}
create_ml_includes-absolute ()
{
local dst="$(create_ml_includes-tidy_path $1)";
dst=(${dst//\// });
local i;
for ((i=0; i<${#dst[*]}; i++))
do
[ "${dst[i]}" == "include" ] && break;
done;
local strip_upto=$i;
for ((i=strip_upto+1; i<${#dst[*]}-1; i++))
do
echo -n ${dst[i]}/;
done;
echo -n ${dst[i]}
}
create_ml_includes-allfiles ()
{
local basedir file;
for basedir in "$@";
do
for file in $(find "${D}"/${basedir} -type f);
do
echo ${file/${D}\/${basedir}\//};
done;
done | sort | uniq
}
create_ml_includes-listdirs ()
{
local dirs;
local data;
for data in "$@";
do
dirs="${dirs} ${data/*:/}";
done;
echo ${dirs:1}
}
create_ml_includes-makedestdirs ()
{
local dest=$1;
shift;
local basedirs=$@;
dodir ${dest};
local basedir;
for basedir in ${basedirs};
do
local dir;
for dir in $(find ${D}/${basedir} -type d);
do
dodir ${dest}/${dir/${D}\/${basedir}/};
done;
done
}
create_ml_includes-sym_for_dir ()
{
local dir=$1;
shift;
local data;
for data in "$@";
do
if [[ ${data} == *:${dir} ]]; then
echo ${data/:*/};
return 0;
fi;
done;
echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@";
exit 1
}
create_ml_includes-tidy_path ()
{
local removed=$1;
if [ -n "${removed}" ]; then
while [ "${removed}" != "${removed/\/\//\/}" ]; do
removed=${removed/\/\//\/};
done;
while [ "${removed}" != "${removed//\/.\//\/}" ]; do
removed=${removed//\/.\//\/};
done;
[ "${removed##*/}" = "." ] && removed=${removed%/*};
while [ "${removed}" != "${removed//\/..\/}" ]; do
local p1="${removed%%\/..\/*}";
local p2="${removed#*\/..\/}";
removed="${p1%\/*}/${p2}";
done;
[ "${removed##*/}" = ".." ] && removed=${removed%/*/*};
[ "${removed##*/}" = "" ] && removed=${removed%/*};
echo ${removed};
fi
}
darwintoolize ()
{
ewarn "darwintoolize() is deprecated, please just use elibtoolize()!";
elibtoolize
}
delete_all_version_separators ()
{
__versionator_shopt_toggle on;
replace_all_version_separators "" "${1}";
__versionator_shopt_toggle off
}
delete_version_separator ()
{
__versionator_shopt_toggle on;
replace_version_separator "${1}" "" "${2}";
__versionator_shopt_toggle off
}
dlopen_lib ()
{
if [[ ${ELIBC} != *BSD ]]; then
echo "-ldl";
fi
}
doicon ()
{
( local i j ret;
insinto /usr/share/pixmaps;
for i in "$@";
do
if [[ -f ${i} ]]; then
doins "${i}";
((ret+=$?));
else
if [[ -d ${i} ]]; then
for j in "${i}"/*.png;
do
doins "${j}";
((ret+=$?));
done;
else
((++ret));
fi;
fi;
done;
exit ${ret} )
}
domenu ()
{
( local i j ret=0;
insinto /usr/share/applications;
for i in "$@";
do
if [[ -f ${i} ]]; then
doins "${i}";
((ret+=$?));
else
if [[ -d ${i} ]]; then
for j in "${i}"/*.desktop;
do
doins "${j}";
((ret+=$?));
done;
else
((++ret));
fi;
fi;
done;
exit ${ret} )
}
eaclocal ()
{
local aclocal_opts;
local amflags_file;
for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in;
do
[[ -e ${amflags_file} ]] || continue;
aclocal_opts=$(sed -n '/^ACLOCAL_AMFLAGS[[:space:]]*=/s:[^=]*=::p' ${amflags_file});
eval aclocal_opts=\"${aclocal_opts}\";
break;
done;
if [[ -n ${AT_M4DIR} ]]; then
for x in ${AT_M4DIR};
do
case "${x}" in
"-I")
;;
*)
[[ ! -d ${x} ]] && ewarn "eaclocal: '${x}' does not exist";
aclocal_opts="${aclocal_opts} -I ${x}"
;;
esac;
done;
fi;
[[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && autotools_run_tool aclocal "$@" ${aclocal_opts}
}
eautoconf ()
{
if [[ ! -f configure.ac && ! -f configure.in ]]; then
echo;
eerror "No configure.{ac,in} present in '$(pwd | sed -e 's:.*/::')'!";
echo;
die "No configure.{ac,in} present!";
fi;
autotools_run_tool autoconf "$@"
}
eautoheader ()
{
[[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0;
NO_FAIL=1 autotools_run_tool autoheader "$@"
}
eautomake ()
{
local extra_opts;
local makefile_name;
if [[ -f GNUmakefile.am ]]; then
makefile_name="GNUmakefile";
else
if [[ -f Makefile.am ]]; then
makefile_name="Makefile";
else
return 0;
fi;
fi;
if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name}.in ]]; then
local used_automake;
local installed_automake;
installed_automake=$(automake --version | head -n 1 | sed -e 's:.*(GNU automake) ::');
used_automake=$(head -n 1 < ${makefile_name}.in | sed -e 's:.*by automake \(.*\) from .*:\1:');
if [[ ${installed_automake} != ${used_automake} ]]; then
einfo "Automake used for the package (${used_automake}) differs from";
einfo "the installed version (${installed_automake}).";
eautoreconf;
return 0;
fi;
fi;
[[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS ]] || extra_opts="${extra_opts} --foreign";
autotools_run_tool automake --add-missing --copy ${extra_opts} "$@"
}
eautoreconf ()
{
local pwd=$(pwd) x auxdir;
if [[ -z ${AT_NO_RECURSIVE} ]]; then
for x in $(autotools_get_subdirs);
do
if [[ -d ${x} ]]; then
cd "${x}";
AT_NOELIBTOOLIZE="yes" eautoreconf;
cd "${pwd}";
fi;
done;
fi;
auxdir=$(autotools_get_auxdir);
einfo "Running eautoreconf in '$(pwd)' ...";
[[ -n ${auxdir} ]] && mkdir -p ${auxdir};
eaclocal;
if ${LIBTOOLIZE:-libtoolize} -n --install >&/dev/null; then
_elibtoolize --copy --force --install;
else
_elibtoolize --copy --force;
fi;
eautoconf;
eautoheader;
FROM_EAUTORECONF="yes" eautomake ${AM_OPTS};
[[ ${AT_NOELIBTOOLIZE} == "yes" ]] && return 0;
elibtoolize;
return 0
}
ebeep ()
{
local n;
if [[ -z ${EBEEP_IGNORE} ]]; then
for ((n=1 ; n <= ${1:-5} ; n++))
do
echo -ne "\a";
sleep 0.1 >&/dev/null;
sleep 0,1 >&/dev/null;
echo -ne "\a";
sleep 1;
done;
fi
}
ecvs_clean ()
{
[[ -z $* ]] && set -- .;
find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
}
edos2unix ()
{
echo "$@" | xargs sed -i 's/\r$//'
}
egetent ()
{
case ${CHOST} in
*-darwin*)
case "$2" in
*[!0-9]*)
nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
;;
*)
nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
;;
esac
;;
*-freebsd* | *-dragonfly*)
local opts action="user";
[[ $1 == "passwd" ]] || action="group";
if [[ $2 == [[:digit:]]* ]]; then
[[ ${action} == "user" ]] && opts="-u" || opts="-g";
fi;
pw show ${action} ${opts} "$2" -q
;;
*-netbsd* | *-openbsd*)
grep "$2:\*:" /etc/$1
;;
*)
type -p nscd >&/dev/null && nscd -i "$1";
getent "$1" "$2"
;;
esac
}
egethome ()
{
ent=$(egetent passwd $1);
case ${CHOST} in
*-darwin* | *-freebsd* | *-dragonfly*)
echo ${ent} | cut -d: -f9
;;
*)
echo ${ent} | cut -d: -f6
;;
esac
}
egetshell ()
{
ent=$(egetent passwd "$1");
case ${CHOST} in
*-darwin* | *-freebsd* | *-dragonfly*)
echo ${ent} | cut -d: -f10
;;
*)
echo ${ent} cut -d: -f7
;;
esac
}
elibtoolize ()
{
local x=;
local y=;
local do_portage="no";
local do_reversedeps="no";
local do_only_patches="no";
local do_uclibc="yes";
local deptoremove=;
local my_dirlist=;
local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp";
local start_dir=${PWD};
my_dirlist=$(ELT_find_ltmain_sh);
for x in "$@";
do
case "${x}" in
"--portage")
do_portage="yes"
;;
"--reverse-deps")
do_reversedeps="yes";
elt_patches="${elt_patches} fix-relink"
;;
"--patch-only")
do_only_patches="yes"
;;
"^--remove-internal-dep="*)
deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||');
[[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep"
;;
"--shallow")
if [[ -f ${S}/ltmain.sh ]]; then
my_dirlist=${S};
else
my_dirlist=;
fi
;;
"--no-uclibc")
do_uclibc="no"
;;
*)
eerror "Invalid elibtoolize option: ${x}";
die "elibtoolize called with ${x} ??"
;;
esac;
done;
[[ ${do_uclibc} == "yes" ]] && elt_patches="${elt_patches} uclibc-conf uclibc-ltconf";
[[ ${CHOST} == *"-freebsd"* ]] && elt_patches="${elt_patches} fbsd-conf fbsd-ltconf";
[[ ${CHOST} == *"-darwin"* ]] && elt_patches="${elt_patches} darwin-ltconf darwin-ltmain";
for x in ${my_dirlist};
do
local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||");
export ELT_APPLIED_PATCHES=;
export ELT_LTMAIN_SH="${x}/ltmain.sh";
[[ -f ${x}/.elibtoolized ]] && continue;
cd ${x};
einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')";
for y in ${elt_patches};
do
local ret=0;
case "${y}" in
"portage")
if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?;
fi
;;
"rem-int-dep")
ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}";
ret=$?
;;
"fix-relink")
if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]]; then
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?;
fi
;;
"max_cmd_len")
if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]]; then
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?;
fi
;;
"uclibc-conf")
if [[ -e ${x}/configure && -n $(grep 'Transform linux' "${x}/configure") ]]; then
ELT_walk_patches "${x}/configure" "${y}";
ret=$?;
else
if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'Transform linux' "${x}/../configure") ]]; then
ELT_walk_patches "${x}/../configure" "${y}";
ret=$?;
fi;
fi
;;
"uclibc-ltconf")
if [[ -s ${x}/ltconfig ]]; then
ELT_walk_patches "${x}/ltconfig" "${y}";
ret=$?;
fi
;;
"fbsd-conf")
if [[ -e ${x}/configure && -n $(grep 'version_type=freebsd-' "${x}/configure") ]]; then
ELT_walk_patches "${x}/configure" "${y}";
ret=$?;
else
if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'version_type=freebsd-' "${x}/../configure") ]]; then
ELT_walk_patches "${x}/../configure" "${y}";
ret=$?;
fi;
fi
;;
"fbsd-ltconf")
if [[ -s ${x}/ltconfig ]]; then
ELT_walk_patches "${x}/ltconfig" "${y}";
ret=$?;
fi
;;
"darwin-ltconf")
if [[ -s ${x}/ltconfig ]]; then
ELT_walk_patches "${x}/ltconfig" "${y}";
ret=$?;
fi
;;
"install-sh")
ELT_walk_patches "${x}/install-sh" "${y}";
ret=$?
;;
*)
ELT_walk_patches "${x}/ltmain.sh" "${y}";
ret=$?
;;
esac;
if [[ ${ret} -ne 0 ]]; then
case ${y} in
"relink")
local version=$(ELT_libtool_version "${x}/ltmain.sh");
if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
ewarn " Could not apply relink.patch!";
fi
;;
"portage")
if [[ ${do_portage} == "yes" ]]; then
if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
echo;
eerror "Portage patch requested, but failed to apply!";
eerror "Please bug azarah or vapier to add proper patch.";
die "Portage patch requested, but failed to apply!";
fi;
else
if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
:;
else
local version=$( eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); echo "${VERSION}");
echo;
eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
eerror "Please bug azarah or vapier to add proper patch.";
die "Portage patch failed to apply!";
fi;
ELT_APPLIED_PATCHES="portage";
fi
;;
"uclibc-"*)
[[ ${CHOST} == *"-uclibc" ]] && ewarn " uClibc patch set '${y}' failed to apply!"
;;
"fbsd-"*)
if [[ ${CHOST} == *"-freebsd"* ]]; then
if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
eerror " FreeBSD patch set '${y}' failed to apply!";
die "FreeBSD patch set '${y}' failed to apply!";
fi;
fi
;;
"darwin-"*)
[[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${y}' failed to apply!"
;;
esac;
fi;
done;
if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
ewarn "Cannot apply any patches, please file a bug about this";
die;
fi;
fi;
[[ -f ${x}/libtool ]] && rm -f "${x}/libtool";
>> "${x}/.elibtoolized";
done;
cd "${start_dir}"
}
emktemp ()
{
local exe="touch";
[[ $1 == -d ]] && exe="mkdir" && shift;
local topdir=$1;
if [[ -z ${topdir} ]]; then
[[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
fi;
if ! type -P mktemp > /dev/null; then
local tmp=/;
while [[ -e ${tmp} ]]; do
tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
done;
${exe} "${tmp}" || ${exe} -p "${tmp}";
echo "${tmp}";
else
if [[ ${exe} == "touch" ]]; then
TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
else
TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
fi;
fi
}
enewgroup ()
{
case ${EBUILD_PHASE} in
unpack | compile | test | install)
eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
eerror "Package fails at QA and at life. Please file a bug.";
die "Bad package! enewgroup is only for use in pkg_* functions!"
;;
esac;
local egroup="$1";
shift;
if [ -z "${egroup}" ]; then
eerror "No group specified !";
die "Cannot call enewgroup without a group";
fi;
if [[ -n $(egetent group "${egroup}") ]]; then
return 0;
fi;
einfo "Adding group '${egroup}' to your system ...";
local opts=;
local egid="$1";
shift;
if [ ! -z "${egid}" ]; then
if [ "${egid}" -gt 0 ]; then
if [ -z "`egetent group ${egid}`" ]; then
if [[ "${CHOST}" == *-darwin* ]]; then
opts="${opts} ${egid}";
else
opts="${opts} -g ${egid}";
fi;
else
egid="next available; requested gid taken";
fi;
else
eerror "Groupid given but is not greater than 0 !";
die "${egid} is not a valid GID";
fi;
else
egid="next available";
fi;
einfo " - Groupid: ${egid}";
local eextra="$@";
opts="${opts} ${eextra}";
local oldsandbox="${SANDBOX_ON}";
export SANDBOX_ON="0";
case ${CHOST} in
*-darwin*)
if [ ! -z "${eextra}" ]; then
einfo "Extra options are not supported on Darwin/OS X yet";
einfo "Please report the ebuild along with the info below";
einfo "eextra: ${eextra}";
die "Required function missing";
fi;
case ${egid} in
*[!0-9]*)
for ((egid = 101; egid <= 999; egid++))
do
[[ -z $(egetent group ${egid}) ]] && break;
done
;;
esac;
dscl . create /groups/${egroup} gid ${egid};
dscl . create /groups/${egroup} passwd '*'
;;
*-freebsd* | *-dragonfly*)
case ${egid} in
*[!0-9]*)
for ((egid = 101; egid <= 999; egid++))
do
[[ -z $(egetent group ${egid}) ]] && break;
done
;;
esac;
pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
;;
*-netbsd*)
case ${egid} in
*[!0-9]*)
for ((egid = 101; egid <= 999; egid++))
do
[[ -z $(egetent group ${egid}) ]] && break;
done
;;
esac;
groupadd -g ${egid} ${egroup} || die "enewgroup failed"
;;
*)
groupadd ${opts} ${egroup} || die "enewgroup failed"
;;
esac;
export SANDBOX_ON="${oldsandbox}"
}
enewuser ()
{
case ${EBUILD_PHASE} in
unpack | compile | test | install)
eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
eerror "Package fails at QA and at life. Please file a bug.";
die "Bad package! enewuser is only for use in pkg_* functions!"
;;
esac;
local euser=$1;
shift;
if [[ -z ${euser} ]]; then
eerror "No username specified !";
die "Cannot call enewuser without a username";
fi;
if [[ -n $(egetent passwd "${euser}") ]]; then
return 0;
fi;
einfo "Adding user '${euser}' to your system ...";
local opts=;
local euid=$1;
shift;
if [[ -n ${euid} && ${euid} != -1 ]]; then
if [[ ${euid} -gt 0 ]]; then
if [[ -n $(egetent passwd ${euid}) ]]; then
euid="next";
fi;
else
eerror "Userid given but is not greater than 0 !";
die "${euid} is not a valid UID";
fi;
else
euid="next";
fi;
if [[ ${euid} == "next" ]]; then
for ((euid = 101; euid <= 999; euid++))
do
[[ -z $(egetent passwd ${euid}) ]] && break;
done;
fi;
opts="${opts} -u ${euid}";
einfo " - Userid: ${euid}";
local eshell=$1;
shift;
if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then
if [[ ! -e ${ROOT}${eshell} ]]; then
eerror "A shell was specified but it does not exist !";
die "${eshell} does not exist in ${ROOT}";
fi;
if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then
eerror "Do not specify ${eshell} yourself, use -1";
die "Pass '-1' as the shell parameter";
fi;
else
for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null;
do
[[ -x ${ROOT}${shell} ]] && break;
done;
if [[ ${shell} == "/dev/null" ]]; then
eerror "Unable to identify the shell to use, proceeding with userland default.";
case ${USERLAND} in
GNU)
shell="/bin/false"
;;
BSD)
shell="/sbin/nologin"
;;
Darwin)
shell="/usr/sbin/nologin"
;;
*)
die "Unable to identify the default shell for userland ${USERLAND}"
;;
esac;
fi;
eshell=${shell};
fi;
einfo " - Shell: ${eshell}";
opts="${opts} -s ${eshell}";
local ehome=$1;
shift;
if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then
ehome="/dev/null";
fi;
einfo " - Home: ${ehome}";
opts="${opts} -d ${ehome}";
local egroups=$1;
shift;
if [[ ! -z ${egroups} ]]; then
local oldifs=${IFS};
local defgroup="" exgroups="";
export IFS=",";
for g in ${egroups};
do
export IFS=${oldifs};
if [[ -z $(egetent group "${g}") ]]; then
eerror "You must add group ${g} to the system first";
die "${g} is not a valid GID";
fi;
if [[ -z ${defgroup} ]]; then
defgroup=${g};
else
exgroups="${exgroups},${g}";
fi;
export IFS=",";
done;
export IFS=${oldifs};
opts="${opts} -g ${defgroup}";
if [[ ! -z ${exgroups} ]]; then
opts="${opts} -G ${exgroups:1}";
fi;
else
egroups="(none)";
fi;
einfo " - Groups: ${egroups}";
local oldsandbox=${SANDBOX_ON};
export SANDBOX_ON="0";
case ${CHOST} in
*-darwin*)
if [[ -z $@ ]]; then
dscl . create /users/${euser} uid ${euid};
dscl . create /users/${euser} shell ${eshell};
dscl . create /users/${euser} home ${ehome};
dscl . create /users/${euser} realname "added by portage for ${PN}";
local oldifs=${IFS};
export IFS=",";
for g in ${egroups};
do
dscl . merge /groups/${g} users ${euser};
done;
export IFS=${oldifs};
else
einfo "Extra options are not supported on Darwin yet";
einfo "Please report the ebuild along with the info below";
einfo "eextra: $@";
die "Required function missing";
fi
;;
*-freebsd* | *-dragonfly*)
if [[ -z $@ ]]; then
pw useradd ${euser} ${opts} -c "added by portage for ${PN}" die "enewuser failed";
else
einfo " - Extra: $@";
pw useradd ${euser} ${opts} "$@" || die "enewuser failed";
fi
;;
*-netbsd*)
if [[ -z $@ ]]; then
useradd ${opts} ${euser} || die "enewuser failed";
else
einfo " - Extra: $@";
useradd ${opts} ${euser} "$@" || die "enewuser failed";
fi
;;
*-openbsd*)
if [[ -z $@ ]]; then
useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} || die "enewuser failed";
else
einfo " - Extra: $@";
useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} "$@" || die "enewuser failed";
fi
;;
*)
if [[ -z $@ ]]; then
useradd ${opts} ${euser} -c "added by portage for ${PN}" || die "enewuser failed";
else
einfo " - Extra: $@";
useradd ${opts} ${euser} "$@" || die "enewuser failed";
fi
;;
esac;
if [[ ! -e ${ROOT}/${ehome} ]]; then
einfo " - Creating ${ehome} in ${ROOT}";
mkdir -p "${ROOT}/${ehome}";
chown ${euser} "${ROOT}/${ehome}";
chmod 755 "${ROOT}/${ehome}";
fi;
export SANDBOX_ON=${oldsandbox}
}
epatch ()
{
function _epatch_draw_line ()
{
[[ -z $1 ]] && set "$(printf "%65s" '')";
echo "${1//?/=}"
};
function _epatch_assert ()
{
local _pipestatus=${PIPESTATUS[*]};
[[ ${_pipestatus// /} -eq 0 ]]
};
local PIPE_CMD="";
local STDERR_TARGET="${T}/$$.out";
local PATCH_TARGET="${T}/$$.patch";
local PATCH_SUFFIX="";
local SINGLE_PATCH="no";
local x="";
unset P4CONFIG P4PORT P4USER;
if [ "$#" -gt 1 ]; then
local m="";
for m in "$@";
do
epatch "${m}";
done;
return 0;
fi;
if [ -n "$1" -a -f "$1" ]; then
SINGLE_PATCH="yes";
local EPATCH_SOURCE="$1";
local EPATCH_SUFFIX="${1##*\.}";
else
if [ -n "$1" -a -d "$1" ]; then
if [ "${EPATCH_FORCE}" = "yes" ] && [ -z "${EPATCH_SUFFIX}" ]; then
local EPATCH_SOURCE="$1/*";
else
local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}";
fi;
else
if [[ ! -d ${EPATCH_SOURCE} ]] || [[ -n $1 ]]; then
if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]; then
EPATCH_SOURCE="$1";
fi;
echo;
eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:";
eerror;
eerror " ${EPATCH_SOURCE}";
eerror " ( ${EPATCH_SOURCE##*/} )";
echo;
die "Cannot find \$EPATCH_SOURCE!";
fi;
local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}";
fi;
fi;
case ${EPATCH_SUFFIX##*\.} in
lzma)
PIPE_CMD="lzma -dc";
PATCH_SUFFIX="lzma"
;;
bz2)
PIPE_CMD="bzip2 -dc";
PATCH_SUFFIX="bz2"
;;
gz | Z | z)
PIPE_CMD="gzip -dc";
PATCH_SUFFIX="gz"
;;
ZIP | zip)
PIPE_CMD="unzip -p";
PATCH_SUFFIX="zip"
;;
*)
PIPE_CMD="cat";
PATCH_SUFFIX="patch"
;;
esac;
if [ "${SINGLE_PATCH}" = "no" ]; then
einfo "${EPATCH_MULTI_MSG}";
fi;
for x in ${EPATCH_SOURCE};
do
if [ -f ${x} ] && ( [ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || [ "${EPATCH_FORCE}" = "yes" ] ); then
local count=0;
local popts="${EPATCH_OPTS}";
local patchname=${x##*/};
if [ -n "${EPATCH_EXCLUDE}" ]; then
if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]; then
continue;
fi;
fi;
if [ "${SINGLE_PATCH}" = "yes" ]; then
if [ -n "${EPATCH_SINGLE_MSG}" ]; then
einfo "${EPATCH_SINGLE_MSG}";
else
einfo "Applying ${patchname} ...";
fi;
else
einfo " ${patchname} ...";
fi;
echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
if [[ ${PATCH_SUFFIX} != "patch" ]]; then
echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
if ! ( ${PIPE_CMD} ${x} > ${PATCH_TARGET} ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then
echo;
eerror "Could not extract patch!";
count=5;
break;
fi;
else
PATCH_TARGET="${x}";
fi;
local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
if [[ -n ${abs_paths} ]]; then
count=1;
echo "NOTE: skipping -p0 due to absolute paths in patch:" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo "${abs_paths}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
fi;
while [ "${count}" -lt 5 ]; do
_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
if ( cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f;
_epatch_assert ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then
_epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
_epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1;
_epatch_assert;
if [ "$?" -ne 0 ]; then
cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
echo;
eerror "A dry-run of patch command succeeded, but actually";
eerror "applying the patch failed!";
count=5;
fi;
rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
break;
fi;
count=$((count + 1));
done;
if [ "${PATCH_SUFFIX}" != "patch" ]; then
rm -f ${PATCH_TARGET};
fi;
if [ "${count}" -eq 5 ]; then
echo;
eerror "Failed Patch: ${patchname} !";
eerror " ( ${PATCH_TARGET} )";
eerror;
eerror "Include in your bugreport the contents of:";
eerror;
eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}";
echo;
die "Failed Patch: ${patchname}!";
fi;
rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
eend 0;
fi;
done;
if [ "${SINGLE_PATCH}" = "no" ]; then
einfo "Done with patching";
fi
}
epause ()
{
[[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5}
}
epunt_cxx ()
{
local dir=$1;
[[ -z ${dir} ]] && dir=${S};
ebegin "Removing useless C++ checks";
local f;
find "${dir}" -name configure | while read f; do
patch --no-backup-if-mismatch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null;
done;
eend 0
}
esvn_clean ()
{
[[ -z $* ]] && set -- .;
find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
}
filter-flags ()
{
_filter-hardened "$@";
_filter-var CFLAGS "$@";
_filter-var CPPFLAGS "$@";
_filter-var CXXFLAGS "$@";
_filter-var FFLAGS "$@";
_filter-var FCFLAGS "$@";
return 0
}
filter-ldflags ()
{
_filter-var LDFLAGS "$@";
return 0
}
filter-lfs-flags ()
{
[[ -n $@ ]] && die "filter-lfs-flags takes no arguments";
filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
}
filter-mfpmath ()
{
local orig_mfpmath new_math prune_math;
orig_mfpmath=$(get-flag -mfpmath);
new_math=$(get-flag mfpmath);
new_math=" ${new_math//,/ } ";
prune_math="";
for prune_math in "$@";
do
new_math=${new_math/ ${prune_math} / };
done;
new_math=$(echo ${new_math});
new_math=${new_math// /,};
if [[ -z ${new_math} ]]; then
filter-flags ${orig_mfpmath};
else
replace-flags ${orig_mfpmath} -mfpmath=${new_math};
fi;
return 0
}
find_module_params ()
{
debug-print-function ${FUNCNAME} $*;
local matched_offset=0 matched_opts=0 test="${@}" temp_var result;
local i=0 y=0 z=0;
for ((i=0; i<=${#test}; i++))
do
case ${test:${i}:1} in
\()
matched_offset[0]=${i}
;;
\:)
matched_opts=$((${matched_opts} + 1));
matched_offset[${matched_opts}]="${i}"
;;
\))
matched_opts=$((${matched_opts} + 1));
matched_offset[${matched_opts}]="${i}"
;;
esac;
done;
for ((i=0; i<=${matched_opts}; i++))
do
case ${i} in
0)
tempvar=${test:0:${matched_offset[0]}}
;;
*)
y=$((${matched_offset[$((${i} - 1))]} + 1));
z=$((${matched_offset[${i}]} - ${matched_offset[$((${i} - 1))]}));
z=$((${z} - 1));
tempvar=${test:${y}:${z}}
;;
esac;
case ${i} in
0)
result="${result} modulename:${tempvar}"
;;
1)
result="${result} libdir:${tempvar}"
;;
2)
result="${result} srcdir:${tempvar}"
;;
3)
result="${result} objdir:${tempvar}"
;;
esac;
done;
echo ${result}
}
find_unpackable_file ()
{
local src=$1;
if [[ -z ${src} ]]; then
src=${DISTDIR}/${A};
else
if [[ -e ${DISTDIR}/${src} ]]; then
src=${DISTDIR}/${src};
else
if [[ -e ${PWD}/${src} ]]; then
src=${PWD}/${src};
else
if [[ -e ${src} ]]; then
src=${src};
fi;
fi;
fi;
fi;
[[ ! -e ${src} ]] && return 1;
echo "${src}"
}
gcc-fullversion ()
{
$(tc-getCC "$@") -dumpversion
}
gcc-major-version ()
{
gcc-version "$@" | cut -f1 -d.
}
gcc-micro-version ()
{
gcc-fullversion "$@" | cut -f3 -d. | cut -f1 -d-
}
gcc-minor-version ()
{
gcc-version "$@" | cut -f2 -d.
}
gcc-specs-directive ()
{
local directive subdname subdirective;
directive="$(_gcc-specs-directive_raw $1)";
while [[ ${directive} == *%\(*\)* ]]; do
subdname=${directive/*%\(};
subdname=${subdname/\)*};
subdirective="$(_gcc-specs-directive_raw ${subdname})";
directive="${directive//\%(${subdname})/${subdirective}}";
done;
echo "${directive}";
return 0
}
gcc-specs-nostrict ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]])
}
gcc-specs-now ()
{
local directive;
directive=$(gcc-specs-directive link_command);
return $([[ "${directive/\{!nonow:}" != "${directive}" ]])
}
gcc-specs-pie ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!nopie:}" != "${directive}" ]])
}
gcc-specs-relro ()
{
local directive;
directive=$(gcc-specs-directive link_command);
return $([[ "${directive/\{!norelro:}" != "${directive}" ]])
}
gcc-specs-ssp ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]])
}
gcc-specs-ssp-to-all ()
{
local directive;
directive=$(gcc-specs-directive cc1);
return $([[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]])
}
gcc-version ()
{
gcc-fullversion "$@" | cut -f1,2 -d.
}
gen_usr_ldscript ()
{
local lib libdir=$(get_libdir) output_format="";
dodir /usr/${libdir};
output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
[[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
for lib in "$@";
do
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
cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
/* GNU ld script
Since Gentoo has critical dynamic libraries
in /lib, and the static versions in /usr/lib,
we need to have a "fake" dynamic lib in /usr/lib,
otherwise we run into linking problems.
See bug http://bugs.gentoo.org/4411 for more info.
*/
${output_format}
GROUP ( /${libdir}/${lib} )
END_LDSCRIPT
fi
fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
done
}
generate_modulesd ()
{
debug-print-function ${FUNCNAME} $*;
local currm_path currm currm_t t myIFS myVAR;
local module_docs module_enabled module_aliases module_additions module_examples module_modinfo module_opts;
for currm_path in ${@};
do
currm=${currm_path//*\/};
currm=$(echo ${currm} | tr '[:lower:]' '[:upper:]');
currm_t=${currm};
while [[ -z ${currm_t//*-*} ]]; do
currm_t=${currm_t/-/_};
done;
module_docs="$(eval echo \${MODULESD_${currm_t}_DOCS})";
module_enabled="$(eval echo \${MODULESD_${currm_t}_ENABLED})";
module_aliases="$(eval echo \${#MODULESD_${currm_t}_ALIASES[*]})";
module_additions="$(eval echo \${#MODULESD_${currm_t}_ADDITIONS[*]})";
module_examples="$(eval echo \${#MODULESD_${currm_t}_EXAMPLES[*]})";
[[ ${module_aliases} -eq 0 ]] && unset module_aliases;
[[ ${module_additions} -eq 0 ]] && unset module_additions;
[[ ${module_examples} -eq 0 ]] && unset module_examples;
[[ ${module_enabled} == no ]] && return 0;
for t in ${!module_*};
do
[[ -z ${!t} ]] && unset ${t};
done;
[[ -z ${!module_*} ]] && return 0;
module_modinfo="$(modinfo -p ${currm_path}.${KV_OBJ})";
module_config="${T}/modulesd-${currm}";
ebegin "Preparing file for modules.d";
echo "# modules.d configuration file for ${currm}" >> ${module_config};
[[ -n ${module_docs} ]] && echo "# For more information please read:" >> ${module_config};
for t in ${module_docs};
do
echo "# ${t//*\/}" >> ${module_config};
done;
echo >> ${module_config};
if [[ ${module_aliases} -gt 0 ]]; then
echo "# Internal Aliases - Do not edit" >> ${module_config};
echo "# ------------------------------" >> ${module_config};
for ((t=0; t<${module_aliases}; t++))
do
echo "alias $(eval echo \${MODULESD_${currm}_ALIASES[$t]})" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
if [[ -n ${module_modinfo} ]]; then
echo >> ${module_config};
echo "# Configurable module parameters" >> ${module_config};
echo "# ------------------------------" >> ${module_config};
myIFS="${IFS}";
IFS="$(echo -en "\n\b")";
for t in ${module_modinfo};
do
myVAR="$(echo ${t#*:} | grep -e " [0-9][ =]" | sed "s:.*\([01][= ]\).*:\1:")";
if [[ -n ${myVAR} ]]; then
module_opts="${module_opts} ${t%%:*}:${myVAR}";
fi;
echo -e "# ${t%%:*}:\t${t#*:}" >> ${module_config};
done;
IFS="${myIFS}";
echo '' >> ${module_config};
fi;
if [[ $(eval echo \${MODULESD_${currm}_ALIASES[0]}) == guess ]]; then
if [[ -n ${module_opts} ]]; then
echo "# For Example..." >> ${module_config};
echo "# --------------" >> ${module_config};
for t in ${module_opts};
do
echo "# options ${currm} ${t//:*}=${t//*:}" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
else
if [[ ${module_examples} -gt 0 ]]; then
echo "# For Example..." >> ${module_config};
echo "# --------------" >> ${module_config};
for ((t=0; t<${module_examples}; t++))
do
echo "options $(eval echo \${MODULESD_${currm}_EXAMPLES[$t]})" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
fi;
if [[ ${module_additions} -gt 0 ]]; then
for ((t=0; t<${module_additions}; t++))
do
echo "$(eval echo \${MODULESD_${currm}_ADDITIONS[$t]})" >> ${module_config};
done;
echo '' >> ${module_config};
fi;
if kernel_is ge 2 6; then
insinto /etc/modprobe.d;
else
insinto /etc/modules.d;
fi;
newins ${module_config} ${currm_path//*\/};
[[ -n ${module_docs} ]] && dodoc ${module_docs};
done;
eend 0;
return 0
}
get-KERNEL_CC ()
{
debug-print-function ${FUNCNAME} $*;
if [[ -n ${KERNEL_CC} ]]; then
echo "${KERNEL_CC}";
return;
fi;
local kernel_cc;
if [ -n "${KERNEL_ABI}" ]; then
kernel_cc="$(tc-getCC $(ABI=${KERNEL_ABI} get_abi_CHOST))";
else
kernel_cc=$(tc-getCC);
fi;
echo "${kernel_cc}"
}
get-flag ()
{
local f findflag="$1";
for f in ${CFLAGS} ${CXXFLAGS} ${FFLAGS} ${FCFLAGS};
do
if [ "${f/${findflag}}" != "${f}" ]; then
printf "%s\n" "${f/-${findflag}=}";
return 0;
fi;
done;
return 1
}
get_abi_ASFLAGS ()
{
get_abi_var ASFLAGS "$@"
}
get_abi_CDEFINE ()
{
get_abi_var CDEFINE "$@"
}
get_abi_CFLAGS ()
{
get_abi_var CFLAGS "$@"
}
get_abi_CHOST ()
{
get_abi_var CHOST "$@"
}
get_abi_CTARGET ()
{
get_abi_var CTARGET "$@"
}
get_abi_FAKE_TARGETS ()
{
get_abi_var FAKE_TARGETS "$@"
}
get_abi_LDFLAGS ()
{
get_abi_var LDFLAGS "$@"
}
get_abi_LIBDIR ()
{
get_abi_var LIBDIR "$@"
}
get_abi_var ()
{
local flag=$1;
local abi;
if [ $# -gt 1 ]; then
abi=${2};
else
if [ -n "${ABI}" ]; then
abi=${ABI};
else
if [ -n "${DEFAULT_ABI}" ]; then
abi=${DEFAULT_ABI};
else
abi="default";
fi;
fi;
fi;
local var="${flag}_${abi}";
echo ${!var}
}
get_after_major_version ()
{
__versionator_shopt_toggle on;
echo $(get_version_component_range 2- "${1:-${PV}}" );
__versionator_shopt_toggle off
}
get_all_abis ()
{
local order="";
if [[ -z ${MULTILIB_ABIS} ]]; then
echo "default";
return 0;
fi;
for x in ${MULTILIB_ABIS};
do
if [[ ${x} != ${DEFAULT_ABI} ]]; then
order="${order:+${order} }${x}";
fi;
done;
order="${order:+${order} }${DEFAULT_ABI}";
echo ${order};
return 0
}
get_all_libdirs ()
{
local libdirs="lib";
local abi;
local dir;
for abi in ${MULTILIB_ABIS};
do
[ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})";
done;
echo "${libdirs}"
}
get_all_version_components ()
{
__versionator_shopt_toggle on;
local ver_str=${1:-${PV}} result result_idx=0;
result=();
if [[ "${VERSIONATOR_CACHE_VER_STR}" == "${ver_str}" ]]; then
echo ${VERSIONATOR_CACHE_RESULT};
__versionator_shopt_toggle off;
return;
fi;
export VERSIONATOR_CACHE_VER_STR="${ver_str}";
while [[ -n "$ver_str" ]]; do
case "${ver_str:0:1}" in
[[:digit:]])
result[$result_idx]="${ver_str%%[^[:digit:]]*}";
ver_str="${ver_str##+([[:digit:]])}";
result_idx=$(($result_idx + 1))
;;
[-_.])
result[$result_idx]="${ver_str:0:1}";
ver_str="${ver_str:1}";
result_idx=$(($result_idx + 1))
;;
[[:alpha:]])
local not_match="${ver_str##+([[:alpha:]])*([[:digit:]])}";
result[$result_idx]=${ver_str:0:$((${#ver_str} - ${#not_match}))};
ver_str="${not_match}";
result_idx=$(($result_idx + 1))
;;
*)
result[$result_idx]="${ver_str:0:1}";
ver_str="${ver_str:1}";
result_idx=$(($result_idx + 1))
;;
esac;
done;
export VERSIONATOR_CACHE_RESULT="${result[@]}";
echo ${result[@]};
__versionator_shopt_toggle off
}
get_bmake ()
{
if [[ ${USERLAND} == *BSD ]]; then
echo make;
else
if [[ ${USERLAND} == "Darwin" ]]; then
echo bsdmake;
else
echo pmake;
fi;
fi
}
get_install_abis ()
{
local order="";
if [[ -z ${MULTILIB_ABIS} ]]; then
echo "default";
return 0;
fi;
if [[ ${EMULTILIB_PKG} == "true" ]]; then
for x in ${MULTILIB_ABIS};
do
if [[ ${x} != "${DEFAULT_ABI}" ]]; then
hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}";
fi;
done;
hasq ${DEFAULT_ABI} ${ABI_DENY} || order="${ordera} ${DEFAULT_ABI}";
if [[ -n ${ABI_ALLOW} ]]; then
local ordera="";
for x in ${order};
do
if hasq ${x} ${ABI_ALLOW}; then
ordera="${ordera} ${x}";
fi;
done;
order=${ordera};
fi;
else
order=${DEFAULT_ABI};
fi;
if [[ -z ${order} ]]; then
die "The ABI list is empty. Are you using a proper multilib profile? Perhaps your USE flags or MULTILIB_ABIS are too restrictive for this package.";
fi;
echo ${order};
return 0
}
get_last_version_component_index ()
{
__versionator_shopt_toggle on;
echo $(( $(get_version_component_count "${1:-${PV}}" ) - 1 ));
__versionator_shopt_toggle off
}
get_libdir ()
{
local CONF_LIBDIR;
if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
echo ${CONF_LIBDIR_OVERRIDE};
else
get_abi_LIBDIR;
fi
}
get_libdir_override ()
{
if has_multilib_profile; then
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";
exit 1;
fi;
CONF_LIBDIR="$1";
CONF_LIBDIR_OVERRIDE="$1";
LIBDIR_default="$1"
}
get_libname ()
{
local libname;
local ver=$1;
case ${CHOST} in
*-cygwin | mingw* | *-mingw*)
libname="dll"
;;
*-darwin*)
libname="dylib"
;;
*)
libname="so"
;;
esac;
if [[ -z $* ]]; then
echo ".${libname}";
else
for ver in "$@";
do
case ${CHOST} in
*-darwin*)
echo ".${ver}.${libname}"
;;
*)
echo ".${libname}.${ver}"
;;
esac;
done;
fi
}
get_localversion ()
{
local lv_list i x;
for i in $(ls ${1}/localversion* 2>/dev/null);
do
[[ -n ${i//*~*} ]] && lv_list="${lv_list} ${i}";
done;
for i in ${lv_list};
do
x="${x}$(<${i})";
done;
x=${x/ /};
echo ${x}
}
get_major_version ()
{
__versionator_shopt_toggle on;
local c;
c=($(get_all_version_components "${1:-${PV}}" ));
echo ${c[0]};
__versionator_shopt_toggle off
}
get_ml_incdir ()
{
local dir=/usr/include;
if [[ $# -gt 0 ]]; then
incdir=$1;
shift;
fi;
if [[ -z "${MULTILIB_ABIS}" ]]; then
echo ${incdir};
return 0;
fi;
local abi=${ABI-${DEFAULT_ABI}};
if [[ $# -gt 0 ]]; then
abi=$1;
shift;
fi;
if [[ -d "${dir}/gentoo-multilib/${abi}" ]]; then
echo ${dir}/gentoo-multilib/${abi};
else
echo ${dir};
fi
}
get_mounts ()
{
local point= node= fs= opts= foo=;
if [[ $(uname -s) == "Linux" ]]; then
while read node point fs opts foo; do
echo "${point} ${node} ${fs} ${opts}";
done < /proc/mounts;
return;
fi;
local IFS=' ';
LC_ALL=C mount -p | while read node point fs foo; do
opts=${fs#* };
fs=${fs%% *};
echo "${point// /\040} ${node// /\040} ${fs%% *} ${opts// /\040}";
done
}
get_multilibdir ()
{
if has_multilib_profile; then
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";
exit 1;
fi;
echo ${CONF_MULTILIBDIR:=lib32}
}
get_running_version ()
{
KV_FULL=$(uname -r);
if [[ -f ${ROOT}/lib/modules/${KV_FULL}/source/Makefile ]]; then
KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/source);
unset KV_FULL;
get_version;
return $?;
else
if [[ -f ${ROOT}/lib/modules/${KV_FULL}/build/Makefile ]]; then
KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/build);
unset KV_FULL;
get_version;
return $?;
else
KV_MAJOR=$(get_version_component_range 1 ${KV_FULL});
KV_MINOR=$(get_version_component_range 2 ${KV_FULL});
KV_PATCH=$(get_version_component_range 3- ${KV_FULL});
KV_PATCH=${KV_PATCH//-*};
[[ -n ${KV_FULL#*-} ]] && [[ -n ${KV_FULL//${KV_FULL#*-}} ]] && KV_EXTRA="-${KV_FULL#*-}";
fi;
fi;
return 0
}
get_version ()
{
local kbuild_output;
[ -n "${KV_FULL}" ] && return 0;
unset KV_DIR;
qeinfo "Determining the location of the kernel source code";
[ -h "${KERNEL_DIR}" ] && KV_DIR="$(readlink -f ${KERNEL_DIR})";
[ -d "${KERNEL_DIR}" ] && KV_DIR="${KERNEL_DIR}";
if [ -z "${KV_DIR}" ]; then
qeerror "Unable to find kernel sources at ${KERNEL_DIR}";
qeinfo "This package requires Linux sources.";
if [ "${KERNEL_DIR}" == "/usr/src/linux" ]; then
qeinfo "Please make sure that ${KERNEL_DIR} points at your running kernel, ";
qeinfo "(or the kernel you wish to build against).";
qeinfo "Alternatively, set the KERNEL_DIR environment variable to the kernel sources location";
else
qeinfo "Please ensure that the KERNEL_DIR environment variable points at full Linux sources of the kernel you wish to compile against.";
fi;
return 1;
fi;
qeinfo "Found kernel source directory:";
qeinfo " ${KV_DIR}";
if [ ! -s "${KV_DIR}/Makefile" ]; then
qeerror "Could not find a Makefile in the kernel source directory.";
qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources";
return 1;
fi;
OUTPUT_DIR="${OUTPUT_DIR:-${KBUILD_OUTPUT}}";
kbuild_output="$(getfilevar KBUILD_OUTPUT ${KV_DIR}/Makefile)";
OUTPUT_DIR="${OUTPUT_DIR:-${kbuild_output}}";
KV_MAJOR="$(getfilevar VERSION ${KV_DIR}/Makefile)";
KV_MINOR="$(getfilevar PATCHLEVEL ${KV_DIR}/Makefile)";
KV_PATCH="$(getfilevar SUBLEVEL ${KV_DIR}/Makefile)";
KV_EXTRA="$(getfilevar EXTRAVERSION ${KV_DIR}/Makefile)";
if [ -z "${KV_MAJOR}" -o -z "${KV_MINOR}" -o -z "${KV_PATCH}" ]; then
qeerror "Could not detect kernel version.";
qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources.";
return 1;
fi;
[ "${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}" == "$(uname -r)" ] && OUTPUT_DIR="${OUTPUT_DIR:-/lib/modules/${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}/build}";
[ -h "${OUTPUT_DIR}" ] && KV_OUT_DIR="$(readlink -f ${OUTPUT_DIR})";
[ -d "${OUTPUT_DIR}" ] && KV_OUT_DIR="${OUTPUT_DIR}";
if [ -n "${KV_OUT_DIR}" ]; then
qeinfo "Found kernel object directory:";
qeinfo " ${KV_OUT_DIR}";
KV_LOCAL="$(get_localversion ${KV_OUT_DIR})";
fi;
KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}";
KV_LOCAL="${KV_LOCAL}$(get_localversion ${KV_DIR})";
if linux_config_exists; then
KV_LOCAL="${KV_LOCAL}$(linux_chkconfig_string LOCALVERSION)";
KV_LOCAL="${KV_LOCAL//\"/}";
[ -e ${KV_DIR}/scripts/setlocalversion ] && linux_chkconfig_builtin LOCALVERSION_AUTO && KV_LOCAL="${KV_LOCAL}$(sh ${KV_DIR}/scripts/setlocalversion ${KV_DIR})";
fi;
KV_FULL="${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}${KV_LOCAL}";
qeinfo "Found sources for kernel version:";
qeinfo " ${KV_FULL}";
return 0
}
get_version_component_count ()
{
__versionator_shopt_toggle on;
local a;
a=($(get_version_components "${1:-${PV}}" ));
echo ${#a[@]};
__versionator_shopt_toggle off
}
get_version_component_range ()
{
__versionator_shopt_toggle on;
local c v="${2:-${PV}}" range="${1}" range_start range_end i=-1 j=0;
c=($(get_all_version_components ${v} ));
range_start="${range%-*}";
range_start="${range_start:-1}";
range_end="${range#*-}";
range_end="${range_end:-${#c[@]}}";
while (( j < ${range_start} )); do
i=$(($i + 1));
[[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return;
[[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1));
done;
while (( j <= ${range_end} )); do
echo -n ${c[$i]};
[[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return;
[[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1));
i=$(($i + 1));
done;
__versionator_shopt_toggle off
}
get_version_components ()
{
__versionator_shopt_toggle on;
local c="$(get_all_version_components "${1:-${PV}}")";
c=(${c[@]//[-._]/ });
echo ${c[@]};
__versionator_shopt_toggle off
}
getfilevar ()
{
local ERROR basefname basedname myARCH="${ARCH}";
ERROR=0;
[ -z "${1}" ] && ERROR=1;
[ ! -f "${2}" ] && ERROR=1;
if [ "${ERROR}" = 1 ]; then
echo -e "\n";
eerror "getfilevar requires 2 variables, with the second a valid file.";
eerror " getfilevar <VARIABLE> <CONFIGFILE>";
else
basefname="$(basename ${2})";
basedname="$(dirname ${2})";
unset ARCH;
echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | make -C "${basedname}" M="${S}" ${BUILD_FIXES} -s -f - 2> /dev/null;
ARCH=${myARCH};
fi
}
has_hardened ()
{
ewarn "has_hardened: deprecated, please use gcc-specs-{relro,now}()!" 1>&2;
test_version_info Hardened && return 0;
[[ -f ${GCC_SPECS} && ${GCC_SPECS} != ${GCC_SPECS/hardened/} ]]
}
has_m32 ()
{
[ "$(tc-arch)" = "amd64" ] && has_multilib_profile && return 0;
local temp=$(emktemp);
echo "int main() { return(0); }" > "${temp}".c;
MY_CC=$(tc-getCC);
${MY_CC/ .*/} -m32 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
local ret=$?;
rm -f "${temp}".c;
[[ ${ret} != 1 ]] && return 0;
return 1
}
has_m64 ()
{
local temp="$(emktemp)";
echo "int main() { return(0); }" > "${temp}".c;
MY_CC=$(tc-getCC);
${MY_CC/ .*/} -m64 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
local ret=$?;
rm -f "${temp}".c;
[[ ${ret} != 1 ]] && return 0;
return 1
}
has_multilib_profile ()
{
[ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
}
has_pic ()
{
ewarn "has_pic: deprecated, please use gcc-specs-pie()!" 1>&2;
[[ ${CFLAGS/-fPIC} != ${CFLAGS} || ${CFLAGS/-fpic} != ${CFLAGS} ]] || gcc-specs-pie
}
has_pie ()
{
ewarn "has_pie: deprecated, please use gcc-specs-pie()!" 1>&2;
[[ ${CFLAGS/-fPIE} != ${CFLAGS} || ${CFLAGS/-fpie} != ${CFLAGS} ]] || gcc-specs-pie
}
has_ssp ()
{
ewarn "has_ssp: deprecated, please use gcc-specs-ssp()!" 1>&2;
[[ ${CFLAGS/-fstack-protector} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP__) ]] || gcc-specs-ssp
}
has_ssp_all ()
{
ewarn "has_ssp_all: deprecated, please use gcc-specs-ssp()!" 1>&2;
[[ ${CFLAGS/-fstack-protector-all} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP_ALL__) ]] || gcc-specs-ssp-to-all
}
is-flag ()
{
is-flagq "$@" && echo true
}
is-flagq ()
{
[[ -n $2 ]] && die "Usage: is-flag <flag>";
_is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 || _is_flagq FFLAGS $1 || _is_flagq FCFLAGS $1
}
is-ldflag ()
{
is-ldflagq "$@" && echo true
}
is-ldflagq ()
{
[[ -n $2 ]] && die "Usage: is-ldflag <flag>";
_is_flagq LDFLAGS $1
}
is-login-disabled ()
{
shell=$(egetshell "$1");
case ${shell} in
/bin/false | /usr/bin/false | /sbin/nologin | /usr/sbin/nologin)
return 0
;;
*)
return 1
;;
esac
}
is_final_abi ()
{
has_multilib_profile || return 0;
local ALL_ABIS=$(get_install_abis);
local LAST_ABI=${ALL_ABIS/* /};
[[ ${LAST_ABI} == ${ABI} ]]
}
kernel_is ()
{
get_version;
local operator test value x=0 y=0 z=0;
case ${1} in
lt)
operator="-lt";
shift
;;
gt)
operator="-gt";
shift
;;
le)
operator="-le";
shift
;;
ge)
operator="-ge";
shift
;;
eq)
operator="-eq";
shift
;;
*)
operator="-eq"
;;
esac;
for x in ${@};
do
for ((y=0; y<$((3 - ${#x})); y++))
do
value="${value}0";
done;
value="${value}${x}";
z=$((${z} + 1));
case ${z} in
1)
for ((y=0; y<$((3 - ${#KV_MAJOR})); y++))
do
test="${test}0";
done;
test="${test}${KV_MAJOR}"
;;
2)
for ((y=0; y<$((3 - ${#KV_MINOR})); y++))
do
test="${test}0";
done;
test="${test}${KV_MINOR}"
;;
3)
for ((y=0; y<$((3 - ${#KV_PATCH})); y++))
do
test="${test}0";
done;
test="${test}${KV_PATCH}"
;;
*)
die "Error in kernel-2_kernel_is(): Too many parameters."
;;
esac;
done;
[ ${test} ${operator} ${value} ] && return 0 || return 1
}
linux-info_pkg_setup ()
{
get_version || die "Unable to calculate Linux Kernel version";
if kernel_is 2 4; then
if [ "$( gcc-major-version )" -eq "4" ]; then
echo;
ewarn "Be warned !! >=sys-devel/gcc-4.0.0 isn't supported with";
ewarn "linux-2.4 (or modules building against a linux-2.4 kernel)!";
echo;
ewarn "Either switch to another gcc-version (via gcc-config) or use a";
ewarn "newer kernel that supports gcc-4.";
echo;
ewarn "Also be aware that bugreports about gcc-4 not working";
ewarn "with linux-2.4 based ebuilds will be closed as INVALID!";
echo;
epause 10;
fi;
fi;
[ -n "${CONFIG_CHECK}" ] && check_extra_config
}
linux-mod_pkg_postinst ()
{
debug-print-function ${FUNCNAME} $*;
${UPDATE_DEPMOD} && update_depmod;
${UPDATE_MODULES} && update_modules;
${UPDATE_MODULEDB} && update_moduledb
}
linux-mod_pkg_postrm ()
{
debug-print-function ${FUNCNAME} $*;
remove_moduledb
}
linux-mod_pkg_preinst ()
{
debug-print-function ${FUNCNAME} $*;
[ -d "${D}lib/modules" ] && UPDATE_DEPMOD=true || UPDATE_DEPMOD=false;
[ -d "${D}etc/modules.d" ] && UPDATE_MODULES=true || UPDATE_MODULES=false;
[ -d "${D}lib/modules" ] && UPDATE_MODULEDB=true || UPDATE_MODULEDB=false
}
linux-mod_pkg_setup ()
{
debug-print-function ${FUNCNAME} $*;
linux-info_pkg_setup;
require_configured_kernel;
check_kernel_built;
strip_modulenames;
[[ -n ${MODULE_NAMES} ]] && check_modules_supported;
set_kvobj
}
linux-mod_src_compile ()
{
debug-print-function ${FUNCNAME} $*;
local modulename libdir srcdir objdir i n myABI="${ABI}";
set_arch_to_kernel;
ABI="${KERNEL_ABI}";
BUILD_TARGETS=${BUILD_TARGETS:-clean module};
strip_modulenames;
cd "${S}";
touch Module.symvers;
for i in ${MODULE_NAMES};
do
unset libdir srcdir objdir;
for n in $(find_module_params ${i});
do
eval ${n/:*}=${n/*:/};
done;
libdir=${libdir:-misc};
srcdir=${srcdir:-${S}};
objdir=${objdir:-${srcdir}};
if [ ! -f "${srcdir}/.built" ]; then
cd ${srcdir};
ln -s "${S}"/Module.symvers Module.symvers;
einfo "Preparing ${modulename} module";
if [[ -n ${ECONF_PARAMS} ]]; then
econf ${ECONF_PARAMS} || die "Unable to run econf ${ECONF_PARAMS}";
fi;
eval "emake HOSTCC=\"$(tc-getBUILD_CC)\" CROSS_COMPILE=${CHOST}- LDFLAGS=\"$(get_abi_LDFLAGS)\" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} " || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CROSS_COMPILE=${CHOST}- LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}";
cd ${OLDPWD};
touch ${srcdir}/.built;
fi;
done;
set_arch_to_portage;
ABI="${myABI}"
}
linux-mod_src_install ()
{
debug-print-function ${FUNCNAME} $*;
local modulename libdir srcdir objdir i n;
strip_modulenames;
for i in ${MODULE_NAMES};
do
unset libdir srcdir objdir;
for n in $(find_module_params ${i});
do
eval ${n/:*}=${n/*:/};
done;
libdir=${libdir:-misc};
srcdir=${srcdir:-${S}};
objdir=${objdir:-${srcdir}};
einfo "Installing ${modulename} module";
cd ${objdir} || die "${objdir} does not exist";
insinto /lib/modules/${KV_FULL}/${libdir};
doins ${modulename}.${KV_OBJ} || die "doins ${modulename}.${KV_OBJ} failed";
cd ${OLDPWD};
generate_modulesd ${objdir}/${modulename};
done
}
linux_chkconfig_builtin ()
{
local RESULT;
require_configured_kernel;
RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)";
[ "${RESULT}" = "y" ] && return 0 || return 1
}
linux_chkconfig_module ()
{
local RESULT;
require_configured_kernel;
RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)";
[ "${RESULT}" = "m" ] && return 0 || return 1
}
linux_chkconfig_present ()
{
local RESULT;
require_configured_kernel;
RESULT="$(getfilevar CONFIG_${1} ${KV_OUT_DIR}/.config)";
[ "${RESULT}" = "m" -o "${RESULT}" = "y" ] && return 0 || return 1
}
linux_chkconfig_string ()
{
require_configured_kernel;
getfilevar "CONFIG_${1}" "${KV_OUT_DIR}/.config"
}
linux_config_exists ()
{
[ -s "${KV_OUT_DIR}/.config" ]
}
make_desktop_entry ()
{
[[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1;
local exec=${1};
local name=${2:-${PN}};
local icon=${3:-${PN}};
local type=${4};
local path=${5};
if [[ -z ${type} ]]; then
local catmaj=${CATEGORY%%-*};
local catmin=${CATEGORY##*-};
case ${catmaj} in
app)
case ${catmin} in
accessibility)
type=Accessibility
;;
admin)
type=System
;;
antivirus)
type=System
;;
arch)
type=Archiving
;;
backup)
type=Archiving
;;
cdr)
type=DiscBurning
;;
dicts)
type=Dictionary
;;
doc)
type=Documentation
;;
editors)
type=TextEditor
;;
emacs)
type=TextEditor
;;
emulation)
type=Emulator
;;
laptop)
type=HardwareSettings
;;
office)
type=Office
;;
pda)
type=PDA
;;
vim)
type=TextEditor
;;
xemacs)
type=TextEditor
;;
*)
type=
;;
esac
;;
dev)
type="Development"
;;
games)
case ${catmin} in
action | fps)
type=ActionGame
;;
arcade)
type=ArcadeGame
;;
board)
type=BoardGame
;;
emulation)
type=Emulator
;;
kids)
type=KidsGame
;;
puzzle)
type=LogicGame
;;
roguelike)
type=RolePlaying
;;
rpg)
type=RolePlaying
;;
simulation)
type=Simulation
;;
sports)
type=SportsGame
;;
strategy)
type=StrategyGame
;;
*)
type=
;;
esac;
type="Game;${type}"
;;
gnome)
type="Gnome;GTK"
;;
kde)
type="KDE;Qt"
;;
mail)
type="Network;Email"
;;
media)
case ${catmin} in
gfx)
type=Graphics
;;
radio)
type=Tuner
;;
sound)
type=Audio
;;
tv)
type=TV
;;
video)
type=Video
;;
*)
type=
;;
esac;
type="AudioVideo;${type}"
;;
net)
case ${catmin} in
dialup)
type=Dialup
;;
ftp)
type=FileTransfer
;;
im)
type=InstantMessaging
;;
irc)
type=IRCClient
;;
mail)
type=Email
;;
news)
type=News
;;
nntp)
type=News
;;
p2p)
type=FileTransfer
;;
*)
type=
;;
esac;
type="Network;${type}"
;;
sci)
case ${catmin} in
astro*)
type=Astronomy
;;
bio*)
type=Biology
;;
calc*)
type=Calculator
;;
chem*)
type=Chemistry
;;
elec*)
type=Electronics
;;
geo*)
type=Geology
;;
math*)
type=Math
;;
physics)
type=Physics
;;
visual*)
type=DataVisualization
;;
*)
type=
;;
esac;
type="Science;${type}"
;;
sys)
type="System"
;;
www)
case ${catmin} in
client)
type=WebBrowser
;;
*)
type=
;;
esac;
type="Network"
;;
*)
type=
;;
esac;
fi;
if [ "${SLOT}" == "0" ]; then
local desktop_name="${PN}";
else
local desktop_name="${PN}-${SLOT}";
fi;
local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
cat > "${desktop}" <<-EOF
[Desktop Entry]
Version=1.0
Name=${name}
Type=Application
Comment=${DESCRIPTION}
Exec=${exec}
TryExec=${exec%% *}
Icon=${icon}
Categories=${type};
EOF
[[ -n ${path} ]] && echo "Path=${path}" >> "${desktop}";
( insinto /usr/share/applications;
doins "${desktop}" )
}
make_session_desktop ()
{
[[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1;
[[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1;
local title=$1;
local command=$2;
local desktop=${T}/${wm}.desktop;
cat > "${desktop}" <<-EOF
[Desktop Entry]
Name=${title}
Comment=This session logs you into ${title}
Exec=${command}
TryExec=${command}
Type=Application
EOF
( insinto /usr/share/xsessions;
doins "${desktop}" )
}
make_wrapper ()
{
local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
local tmpwrapper=$(emktemp);
cat > "${tmpwrapper}" <<EOF
#!/bin/sh
cd "${chdir:-.}"
if [ -n "${libdir}" ] ; then
if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
else
export LD_LIBRARY_PATH="${libdir}"
fi
fi
exec ${bin} "\$@"
EOF
chmod go+rx "${tmpwrapper}";
if [[ -n ${path} ]]; then
( exeinto "${path}";
newexe "${tmpwrapper}" "${wrapper}" ) || die;
else
newbin "${tmpwrapper}" "${wrapper}" || die;
fi
}
move_old_moduledb ()
{
debug-print-function ${FUNCNAME} $*;
local OLDDIR=${ROOT}/usr/share/module-rebuild/;
local NEWDIR=${ROOT}/var/lib/module-rebuild/;
if [[ -f ${OLDDIR}/moduledb ]]; then
[[ ! -d ${NEWDIR} ]] && mkdir -p ${NEWDIR};
[[ ! -f ${NEWDIR}/moduledb ]] && mv ${OLDDIR}/moduledb ${NEWDIR}/moduledb;
rm -f ${OLDDIR}/*;
rmdir ${OLDDIR};
fi
}
multilib_env ()
{
local CTARGET=${1:-${CTARGET}};
case ${CTARGET} in
x86_64*)
export CFLAGS_x86=${CFLAGS_x86--m32};
export CHOST_x86=${CTARGET/x86_64/i686};
export CTARGET_x86=${CHOST_x86};
export CDEFINE_x86="__i386__";
export LIBDIR_x86="lib";
export CFLAGS_amd64=${CFLAGS_amd64--m64};
export CHOST_amd64=${CTARGET};
export CTARGET_amd64=${CHOST_amd64};
export CDEFINE_amd64="__x86_64__";
export LIBDIR_amd64="lib64";
export MULTILIB_ABIS="amd64 x86";
export DEFAULT_ABI="amd64"
;;
mips64*)
export CFLAGS_o32=${CFLAGS_o32--mabi=32};
export CHOST_o32=${CTARGET/mips64/mips};
export CTARGET_o32=${CHOST_o32};
export CDEFINE_o32="_MIPS_SIM == _ABIO32";
export LIBDIR_o32="lib";
export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
export CHOST_n32=${CTARGET};
export CTARGET_n32=${CHOST_n32};
export CDEFINE_n32="_MIPS_SIM == _ABIN32";
export LIBDIR_n32="lib32";
export CFLAGS_n64=${CFLAGS_n64--mabi=64};
export CHOST_n64=${CTARGET};
export CTARGET_n64=${CHOST_n64};
export CDEFINE_n64="_MIPS_SIM == _ABI64";
export LIBDIR_n64="lib64";
export MULTILIB_ABIS="n64 n32 o32";
export DEFAULT_ABI="n32"
;;
powerpc64*)
export CFLAGS_ppc=${CFLAGS_ppc--m32};
export CHOST_ppc=${CTARGET/powerpc64/powerpc};
export CTARGET_ppc=${CHOST_ppc};
export CDEFINE_ppc="!__powerpc64__";
export LIBDIR_ppc="lib";
export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
export CHOST_ppc64=${CTARGET};
export CTARGET_ppc64=${CHOST_ppc64};
export CDEFINE_ppc64="__powerpc64__";
export LIBDIR_ppc64="lib64";
export MULTILIB_ABIS="ppc64 ppc";
export DEFAULT_ABI="ppc64"
;;
s390x*)
export CFLAGS_s390=${CFLAGS_s390--m31};
export CHOST_s390=${CTARGET/s390x/s390};
export CTARGET_s390=${CHOST_s390};
export CDEFINE_s390="!__s390x__";
export LIBDIR_s390="lib";
export CFLAGS_s390x=${CFLAGS_s390x--m64};
export CHOST_s390x=${CTARGET};
export CTARGET_s390x=${CHOST_s390x};
export CDEFINE_s390x="__s390x__";
export LIBDIR_s390x="lib64";
export MULTILIB_ABIS="s390x s390";
export DEFAULT_ABI="s390x"
;;
sparc*)
export CFLAGS_sparc32=${CFLAGS_sparc32};
export CHOST_sparc32=${CTARGET/sparc64/sparc};
export CTARGET_sparc32=${CHOST_sparc32};
export CDEFINE_sparc32="!__arch64__";
export LIBDIR_sparc32="lib";
export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
export CHOST_sparc64=${CTARGET};
export CTARGET_sparc64=${CHOST_sparc64};
export CDEFINE_sparc64="__arch64__";
export LIBDIR_sparc64="lib64";
export MULTILIB_ABIS="${MULTILIB_ABIS-sparc64 sparc32}";
export DEFAULT_ABI="${DEFAULT_ABI-sparc64}"
;;
*)
export MULTILIB_ABIS="default";
export DEFAULT_ABI="default"
;;
esac
}
multilib_toolchain_setup ()
{
export ABI=$1;
if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
: ${CCACHE_DISABLE:=multilib-disable};
else
if [[ ${CCACHE_DISABLE} == "multilib-disable" ]]; then
unset CCACHE_DISABLE;
fi;
fi;
export CCACHE_DISABLE;
if has_version app-admin/eselect-compiler; then
export LD="ld $(get_abi_LDFLAGS $1)";
export AS="as $(get_abi_ASFLAGS $1)";
export CHOST=$(get_abi_CHOST $1);
export CBUILD=$(get_abi_CHOST $1);
else
tc-export CC;
fi
}
newicon ()
{
( insinto /usr/share/pixmaps;
newins "$@" )
}
newmenu ()
{
( insinto /usr/share/applications;
newins "$@" )
}
number_abis ()
{
get_install_abis | wc -w
}
pkg_nofetch ()
{
_eapi0_pkg_nofetch "$@"
}
pkg_postinst ()
{
elog;
elog "Remember that all mixer channels will be MUTED by default.";
elog "Use the 'alsamixer' program to unmute them, then save your";
elog "mixer settings with /etc/init.d/alsasound save";
elog;
elog "If you experience problems, please try building the in-kernel";
elog "ALSA drivers instead. This ebuild is unsupported.";
elog;
linux-mod_pkg_postinst;
if kernel_is 2 6 && [ -e "${ROOT}/lib/modules/${KV_FULL}/kernel/sound" ]; then
for file in $(find "${ROOT}/lib/modules/${KV_FULL}/${PN}" -type f);
do
rm -f ${file//${KV_FULL}\/${PN}/${KV_FULL}\/kernel\/sound};
done;
find "${ROOT}/lib/modules/${KV_FULL}/kernel/sound" -type d -print0 | xargs --null rmdir;
fi
}
pkg_postrm ()
{
linux-mod_pkg_postrm "$@"
}
pkg_preinst ()
{
linux-mod_pkg_preinst "$@"
}
pkg_setup ()
{
ALSA_CARDS=${ALSA_CARDS:-${IUSE_ALSA_CARDS}};
local PNP_DRIVERS="interwave interwave-stb";
local PNP_ERROR="Some of the drivers you selected require PnP support in your kernel (${PNP_DRIVERS}). Either enable PnP in your kernel or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local ISA_DRIVERS="cs4232 msnd-pinnacle adlib ad1816a ad1848 als100 azt2320
cmi8330 cs4231 cs4236 dt019x es968 es1688 es18xx gusclassic gusextreme gusmax
interwave interwave-stb opl3sa2 opti92x-ad1848 opti92x-cs4231 opti93x miro sb8
sb16 sbawe sb16_csp sgalaxy sscape wavefront";
local ISA_ERROR="Some of the drivers you selected require ISA support in your kernel ($(echo $ISA_DRIVERS)). Either enable ISA in your kernel or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local FW_DRIVERS="darla20 gina20 layla20 darla24 gina24 layla24 mona mia echo3g indigo
indigoio indigodj emu10k1 korg1212 maestro3 riptide ymfpci asihpi";
local FW_LOADER_ERROR="Some of the drivers you selected require 'Userspace firmware loading support' in your kernel (${FW_DRIVERS}). Either enable that feature or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local PARPORT_DRIVERS="portman2x4";
local PARPORT_ERROR="Some if the drivers you selected require Parallel Port support (${PARPORT_DRIVERS}). Either enable that feature or trim which drivers get compiled using ALSA_CARDS in /etc/make.conf.";
local TMP_ALSA_CARDS;
local CHECK_PNP;
local CHECK_ISA;
local CHECK_FW;
local CHECK_PARPORT;
for card in ${ALSA_CARDS};
do
if has alsa_cards_${card} ${IUSE} && use alsa_cards_${card}; then
TMP_ALSA_CARDS="${TMP_ALSA_CARDS} ${card}";
has ${card} ${PNP_DRIVERS} && CHECK_PNP="PNP";
has ${card} ${ISA_DRIVERS} && CHECK_ISA="ISA";
has ${card} ${FW_DRIVERS} && CHECK_FW="FW_LOADER";
has ${card} ${PARPORT_DRIVERS} && CHECK_PARPORT="PARPORT";
fi;
done;
ALSA_CARDS="${TMP_ALSA_CARDS}";
local CONFIG_CHECK="!SND SOUND ${CHECK_PNP} ${CHECK_ISA} ${CHECK_FW} ${CHECK_PARPORT}";
local SND_ERROR="ALSA is already compiled into the kernel. This is the recommended configuration, don't emerge alsa-driver.";
local SOUND_ERROR="Your kernel doesn't have sound support enabled.";
local SOUND_PRIME_ERROR="Your kernel is configured to use the deprecated OSS drivers. Please disable them and re-emerge alsa-driver.";
linux-mod_pkg_setup;
if [[ ${PROFILE_ARCH} == "sparc64" ]]; then
export CBUILD=${CBUILD-${CHOST}};
export CHOST="sparc64-unknown-linux-gnu";
fi
}
prep_ml_includes ()
{
if [[ $(number_abis) -gt 1 ]]; then
local dir;
local dirs;
local base;
if [[ $# -eq 0 ]]; then
dirs=/usr/include;
else
dirs="$@";
fi;
for dir in ${dirs};
do
base=${T}/gentoo-multilib/${dir}/gentoo-multilib;
mkdir -p "${base}";
[[ -d ${base}/${ABI} ]] && rm -rf "${base}/${ABI}";
mv "${D}/${dir}" "${base}/${ABI}";
done;
if is_final_abi; then
base=${T}/gentoo-multilib;
pushd "${base}";
find . | tar -c -T - -f - | tar -x --no-same-owner -f - -C ${D};
popd;
set --;
for dir in ${dirs};
do
set -- "$@" "${dir}";
local abi;
for abi in $(get_install_abis);
do
set -- "$@" "$(get_abi_CDEFINE ${abi}):${dir}/gentoo-multilib/${abi}";
done;
create_ml_includes "$@";
done;
fi;
fi
}
preserve_old_lib ()
{
if [[ ${EBUILD_PHASE} != "preinst" ]]; then
eerror "preserve_old_lib() must be called from pkg_preinst() only";
die "Invalid preserve_old_lib() usage";
fi;
[[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
has preserve-libs ${FEATURES} && return 0;
local lib dir;
for lib in "$@";
do
[[ -e ${ROOT}/${lib} ]] || continue;
dir=${lib%/*};
dodir ${dir} || die "dodir ${dir} failed";
cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed";
touch "${D}"/${lib};
done
}
preserve_old_lib_notify ()
{
if [[ ${EBUILD_PHASE} != "postinst" ]]; then
eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
die "Invalid preserve_old_lib_notify() usage";
fi;
has preserve-libs ${FEATURES} && return 0;
local lib notice=0;
for lib in "$@";
do
[[ -e ${ROOT}/${lib} ]] || continue;
if [[ ${notice} -eq 0 ]]; then
notice=1;
ewarn "Old versions of installed libraries were detected on your system.";
ewarn "In order to avoid breaking packages that depend on these old libs,";
ewarn "the libraries are not being removed. You need to run revdep-rebuild";
ewarn "in order to remove these old dependencies. If you do not have this";
ewarn "helper program, simply emerge the 'gentoolkit' package.";
ewarn;
fi;
ewarn " # revdep-rebuild --library ${lib##*/}";
done;
if [[ ${notice} -eq 1 ]]; then
ewarn;
ewarn "Once you've finished running revdep-rebuild, it should be safe to";
ewarn "delete the old libraries. Here is a copy & paste for the lazy:";
for lib in "$@";
do
ewarn " # rm '${lib}'";
done;
fi
}
qeerror ()
{
qout eerror "${@}"
}
qeinfo ()
{
qout einfo "${@}"
}
qout ()
{
local outputmsg type;
type=${1};
shift;
outputmsg="${@}";
case "${EBUILD_PHASE}" in
depend)
unset outputmsg
;;
clean)
unset outputmsg
;;
preinst)
unset outputmsg
;;
esac;
[ -n "${outputmsg}" ] && ${type} "${outputmsg}"
}
raw-ldflags ()
{
local x input="$@";
[[ -z ${input} ]] && input=${LDFLAGS};
set --;
for x in ${input};
do
x=${x#-Wl,};
set -- "$@" ${x//,/ };
done;
echo "$@"
}
remove_moduledb ()
{
debug-print-function ${FUNCNAME} $*;
local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/;
move_old_moduledb;
if grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb; then
einfo "Removing ${CATEGORY}/${PN}-${PVR} from moduledb.";
sed -i -e "/.*${CATEGORY}\/${PN}-${PVR}.*/d" ${MODULEDB_DIR}/moduledb;
fi
}
replace-cpu-flags ()
{
local newcpu="$#";
newcpu="${!newcpu}";
while [ $# -gt 1 ]; do
replace-flags "-march=${1}" "-march=${newcpu}";
replace-flags "-mcpu=${1}" "-mcpu=${newcpu}";
replace-flags "-mtune=${1}" "-mtune=${newcpu}";
shift;
done;
return 0
}
replace-flags ()
{
[[ $# != 2 ]] && echo && eerror "Usage: replace-flags <old flag> <new flag>" && die "replace-flags takes 2 arguments, not $#";
local f fset;
declare -a new_CFLAGS new_CXXFLAGS new_FFLAGS new_FCFLAGS;
for fset in CFLAGS CXXFLAGS FFLAGS FCFLAGS;
do
for f in ${!fset};
do
[[ ${f} == ${1} ]] && f=${2};
eval new_${fset}\[\${\#new_${fset}\[@]}]=\${f};
done;
eval export ${fset}=\${new_${fset}\[*]};
done;
return 0
}
replace-sparc64-flags ()
{
local SPARC64_CPUS="ultrasparc3 ultrasparc v9";
if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then
for x in ${SPARC64_CPUS};
do
CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}";
done;
else
for x in ${SPARC64_CPUS};
do
CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
done;
fi;
if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then
for x in ${SPARC64_CPUS};
do
CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}";
done;
else
for x in ${SPARC64_CPUS};
do
CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
done;
fi;
export CFLAGS CXXFLAGS
}
replace_all_version_separators ()
{
__versionator_shopt_toggle on;
local c;
c=($(get_all_version_components "${2:-${PV}}" ));
c="${c[@]//[-._]/$1}";
echo ${c// };
__versionator_shopt_toggle off
}
replace_version_separator ()
{
__versionator_shopt_toggle on;
local w i c found=0 v="${3:-${PV}}";
w=${1:-1};
c=($(get_all_version_components ${v} ));
if [[ "${w//[[:digit:]]/}" == "${w}" ]]; then
for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 ))
do
if [[ "${c[${i}]}" == "${w}" ]]; then
c[${i}]="${2}";
break;
fi;
done;
else
for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 ))
do
if [[ -n "${c[${i}]//[^-._]}" ]]; then
found=$(($found + 1));
if [[ "$found" == "${w}" ]]; then
c[${i}]="${2}";
break;
fi;
fi;
done;
fi;
c=${c[@]};
echo ${c// };
__versionator_shopt_toggle off
}
require_configured_kernel ()
{
if ! linux_config_exists; then
qeerror "Could not find a usable .config in the kernel source directory.";
qeerror "Please ensure that ${KERNEL_DIR} points to a configured set of Linux sources.";
qeerror "If you are using KBUILD_OUTPUT, please set the environment var so that";
qeerror "it points to the necessary object directory so that it might find .config.";
die "Kernel not configured; no .config found in ${KV_OUT_DIR}";
fi
}
seq ()
{
local p=$(type -P seq);
case $# in
1)
min=1 max=$1 step=1
;;
2)
min=$1 max=$2 step=1
;;
3)
min=$1 max=$3 step=$2
;;
*)
die "seq called with wrong number of arguments"
;;
esac;
if [[ -z ${p} ]]; then
local reps;
if [[ ${step} != 0 ]]; then
reps=$(( ($max-$min) / $step +1 ));
else
reps=0;
fi;
jot $reps $min $max $step;
else
"${p}" $min $step $max;
fi
}
set_arch_to_kernel ()
{
export ARCH=$(tc-arch-kernel)
}
set_arch_to_portage ()
{
export ARCH=$(tc-arch)
}
set_kvobj ()
{
debug-print-function ${FUNCNAME} $*;
if kernel_is 2 6; then
KV_OBJ="ko";
else
KV_OBJ="o";
fi
}
setup-allowed-flags ()
{
if [[ -z ${ALLOWED_FLAGS} ]]; then
export ALLOWED_FLAGS="-pipe";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -O -O0 -O1 -O2 -mcpu -march -mtune";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fstack-protector -fstack-protector-all";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fbounds-checking -fno-strict-overflow";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-PIE -fno-pie -fno-unit-at-a-time";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident";
export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w";
fi;
ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow";
ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt -m*-toc -D* -U*";
export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks";
return 0
}
src_compile ()
{
local myABI=${ABI:-${DEFAULT_ABI}};
is-flag "-malign-double" && filter-flags "-fomit-frame-pointer";
append-flags "-I${KV_DIR}/arch/$(tc-arch-kernel)/include";
econf $(use_with oss) $(use_with oss pcm-oss-plugins) $(use_with debug debug full) --with-kernel="${KV_DIR}" --with-build="${KV_OUT_DIR}" --with-redhat=no --with-suse=no --with-isapnp=auto $(use_with midi sequencer) --with-cards="${ALSA_CARDS} --with-card-options=all" || die "econf failed";
ARCH=$(tc-arch-kernel);
ABI=${KERNEL_ABI};
emake LDFLAGS="$(raw-ldflags)" HOSTCC="$(tc-getBUILD_CC)" CC="$(tc-getCC)" || die "Make Failed";
ARCH=$(tc-arch);
ABI=${myABI}
}
src_install ()
{
emake DESTDIR="${D}" install-modules || die "make install failed";
dodoc CARDS-STATUS FAQ README WARNING TODO SUPPORTED_KERNELS;
if kernel_is 2 6; then
mv "${D}/lib/modules/${KV_FULL}/kernel/sound" "${D}/lib/modules/${KV_FULL}/${PN}";
rmdir "${D}/lib/modules/${KV_FULL}/kernel" >&/dev/null;
fi
}
src_test ()
{
_eapi0_src_test "$@"
}
src_unpack ()
{
unpack ${A};
cd "${S}";
convert_to_m "${S}/Makefile";
sed -i -e 's:\(.*depmod\):#\1:' "${S}/Makefile";
eautoconf
}
strip-flags ()
{
local x y flag NEW_CFLAGS NEW_CXXFLAGS NEW_FFLAGS NEW_FCFLAGS;
setup-allowed-flags;
local NEW_CFLAGS="";
local NEW_CXXFLAGS="";
local NEW_FFLAGS="";
local NEW_FCFLAGS="";
if has ~$(tc-arch) ${ACCEPT_KEYWORDS}; then
ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}";
fi;
set -f;
for x in ${CFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_CFLAGS="${NEW_CFLAGS} ${x}";
break;
fi;
done;
done;
for x in ${CXXFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_CXXFLAGS="${NEW_CXXFLAGS} ${x}";
break;
fi;
done;
done;
for x in ${FFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_FFLAGS="${NEW_FFLAGS} ${x}";
break;
fi;
done;
done;
for x in ${FCFLAGS};
do
for y in ${ALLOWED_FLAGS};
do
flag=${x%%=*};
if [ "${flag%%${y}}" = "" ]; then
NEW_FCFLAGS="${NEW_FCFLAGS} ${x}";
break;
fi;
done;
done;
if [ "${CFLAGS/-O}" != "${CFLAGS}" -a "${NEW_CFLAGS/-O}" = "${NEW_CFLAGS}" ]; then
NEW_CFLAGS="${NEW_CFLAGS} -O2";
fi;
if [ "${CXXFLAGS/-O}" != "${CXXFLAGS}" -a "${NEW_CXXFLAGS/-O}" = "${NEW_CXXFLAGS}" ]; then
NEW_CXXFLAGS="${NEW_CXXFLAGS} -O2";
fi;
if [ "${FFLAGS/-O}" != "${FFLAGS}" -a "${NEW_FFLAGS/-O}" = "${NEW_FFLAGS}" ]; then
NEW_FFLAGS="${NEW_FFLAGS} -O2";
fi;
if [ "${FCFLAGS/-O}" != "${FCFLAGS}" -a "${NEW_FCFLAGS/-O}" = "${NEW_FCFLAGS}" ]; then
NEW_FCFLAGS="${NEW_FCFLAGS} -O2";
fi;
set +f;
export CFLAGS="${NEW_CFLAGS}";
export CXXFLAGS="${NEW_CXXFLAGS}";
export FFLAGS="${NEW_FFLAGS}";
export FCFLAGS="${NEW_FCFLAGS}";
return 0
}
strip-linguas ()
{
local ls newls nols;
if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
local op=$1;
shift;
ls=$(find "$1" -name '*.po' -exec basename {} .po \;);
shift;
local d f;
for d in "$@";
do
if [[ ${op} == "-u" ]]; then
newls=${ls};
else
newls="";
fi;
for f in $(find "$d" -name '*.po' -exec basename {} .po \;);
do
if [[ ${op} == "-i" ]]; then
hasq ${f} ${ls} && newls="${newls} ${f}";
else
hasq ${f} ${ls} || newls="${newls} ${f}";
fi;
done;
ls=${newls};
done;
else
ls="$@";
fi;
nols="";
newls="";
for f in ${LINGUAS};
do
if hasq ${f} ${ls}; then
newls="${newls} ${f}";
else
nols="${nols} ${f}";
fi;
done;
[[ -n ${nols} ]] && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols};
export LINGUAS=${newls:1}
}
strip-unsupported-flags ()
{
export CFLAGS=$(test-flags-CC ${CFLAGS});
export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS});
export FFLAGS=$(test-flags-F77 ${FFLAGS});
export FCFLAGS=$(test-flags-FC ${FCFLAGS})
}
strip_modulenames ()
{
debug-print-function ${FUNCNAME} $*;
local i;
for i in ${MODULE_IGNORE};
do
MODULE_NAMES=${MODULE_NAMES//${i}(*};
done
}
tc-arch ()
{
tc-ninja_magic_to_arch portage "$@"
}
tc-arch-kernel ()
{
tc-ninja_magic_to_arch kern "$@"
}
tc-endian ()
{
local host=$1;
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
host=${host%%-*};
case ${host} in
alpha*)
echo big
;;
arm*b*)
echo big
;;
arm*)
echo little
;;
cris*)
echo little
;;
hppa*)
echo big
;;
i?86*)
echo little
;;
ia64*)
echo little
;;
m68*)
echo big
;;
mips*l*)
echo little
;;
mips*)
echo big
;;
powerpc*)
echo big
;;
s390*)
echo big
;;
sh*b*)
echo big
;;
sh*)
echo little
;;
sparc*)
echo big
;;
x86_64*)
echo little
;;
*)
echo wtf
;;
esac
}
tc-export ()
{
local var;
for var in "$@";
do
[[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
eval tc-get${var} > /dev/null;
done
}
tc-getAR ()
{
tc-getPROG AR ar "$@"
}
tc-getAS ()
{
tc-getPROG AS as "$@"
}
tc-getBUILD_CC ()
{
local v;
for v in CC_FOR_BUILD BUILD_CC HOSTCC;
do
if [[ -n ${!v} ]]; then
export BUILD_CC=${!v};
echo "${!v}";
return 0;
fi;
done;
local search=;
if [[ -n ${CBUILD} ]]; then
search=$(type -p ${CBUILD}-gcc);
search=${search##*/};
fi;
search=${search:-gcc};
export BUILD_CC=${search};
echo "${search}"
}
tc-getCC ()
{
tc-getPROG CC gcc "$@"
}
tc-getCPP ()
{
tc-getPROG CPP cpp "$@"
}
tc-getCXX ()
{
tc-getPROG CXX g++ "$@"
}
tc-getF77 ()
{
tc-getPROG F77 f77 "$@"
}
tc-getFC ()
{
tc-getPROG FC gfortran "$@"
}
tc-getGCJ ()
{
tc-getPROG GCJ gcj "$@"
}
tc-getLD ()
{
tc-getPROG LD ld "$@"
}
tc-getNM ()
{
tc-getPROG NM nm "$@"
}
tc-getPROG ()
{
local var=$1;
local prog=$2;
if [[ -n ${!var} ]]; then
echo "${!var}";
return 0;
fi;
local search=;
[[ -n $3 ]] && search=$(type -p "$3-${prog}");
[[ -z ${search} && -n ${CHOST} ]] && search=$(type -p "${CHOST}-${prog}");
[[ -n ${search} ]] && prog=${search##*/};
export ${var}=${prog};
echo "${!var}"
}
tc-getRANLIB ()
{
tc-getPROG RANLIB ranlib "$@"
}
tc-getSTRIP ()
{
tc-getPROG STRIP strip "$@"
}
tc-is-cross-compiler ()
{
return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
}
tc-is-softfloat ()
{
case ${CTARGET} in
bfin* | h8300*)
echo "only"
;;
*)
[[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no"
;;
esac
}
tc-ninja_magic_to_arch ()
{
function ninj ()
{
[[ ${type} == "kern" ]] && echo $1 || echo $2
};
local type=$1;
local host=$2;
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
case ${host} in
alpha*)
echo alpha
;;
arm*)
echo arm
;;
avr*)
ninj avr32 avr
;;
bfin*)
ninj blackfin bfin
;;
cris*)
echo cris
;;
hppa*)
ninj parisc hppa
;;
i?86*)
if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
echo i386;
else
echo x86;
fi
;;
ia64*)
echo ia64
;;
m68*)
echo m68k
;;
mips*)
echo mips
;;
nios2*)
echo nios2
;;
nios*)
echo nios
;;
powerpc*)
if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]] && [[ ${type} == "kern" ]]; then
echo powerpc;
else
if [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]] && [[ ${type} == "kern" ]]; then
if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
echo powerpc;
else
echo ppc;
fi;
else
if [[ ${host} == powerpc64* ]]; then
echo ppc64;
else
if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
ninj ppc64 ppc;
else
echo ppc;
fi;
fi;
fi;
fi
;;
s390*)
echo s390
;;
sh64*)
ninj sh64 sh
;;
sh*)
echo sh
;;
sparc64*)
ninj sparc64 sparc
;;
sparc*)
[[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
;;
vax*)
echo vax
;;
x86_64*)
if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
echo x86;
else
ninj x86_64 amd64;
fi
;;
*)
echo unknown
;;
esac
}
test-flag-CC ()
{
test-flag-PROG "CC" "$1"
}
test-flag-CXX ()
{
test-flag-PROG "CXX" "$1"
}
test-flag-F77 ()
{
test-flag-PROG "F77" "$1"
}
test-flag-FC ()
{
test-flag-PROG "FC" "$1"
}
test-flag-PROG ()
{
local comp=$1;
local flags="$2";
[[ -z ${comp} || -z ${flags} ]] && return 1;
local PROG=$(tc-get${comp});
${PROG} ${flags} -S -o /dev/null -xc /dev/null > /dev/null 2>&1
}
test-flags ()
{
test-flags-CC "$@"
}
test-flags-CC ()
{
test-flags-PROG "CC" "$@"
}
test-flags-CXX ()
{
test-flags-PROG "CXX" "$@"
}
test-flags-F77 ()
{
test-flags-PROG "F77" "$@"
}
test-flags-FC ()
{
test-flags-PROG "FC" "$@"
}
test-flags-PROG ()
{
local comp=$1;
local flags;
local x;
shift;
[[ -z ${comp} ]] && return 1;
x="";
for x in "$@";
do
test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}";
done;
echo "${flags}";
[[ -n ${flags} ]]
}
test_flag ()
{
ewarn "test_flag: deprecated, please use test-flags()!" 1>&2;
test-flags-CC "$@"
}
test_version_info ()
{
if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
return 0;
else
return 1;
fi
}
treecopy ()
{
dest=${!#};
files_count=$#;
while (( $# > 1 )); do
dirstruct=$(dirname "$1");
mkdir -p "${dest}/${dirstruct}";
cp -pPR "$1" "${dest}/${dirstruct}";
shift;
done
}
uclibctoolize ()
{
ewarn "uclibctoolize() is deprecated, please just use elibtoolize()!";
elibtoolize
}
unpack_makeself ()
{
local src_input=${1:-${A}};
local src=$(find_unpackable_file "${src_input}");
local skip=$2;
local exe=$3;
[[ -z ${src} ]] && die "Could not locate source for '${src_input}'";
local shrtsrc=$(basename "${src}");
echo ">>> Unpacking ${shrtsrc} to ${PWD}";
if [[ -z ${skip} ]]; then
local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}');
local skip=0;
exe=tail;
case ${ver} in
1.5.* | 1.6.0-nv)
skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
;;
2.0 | 2.0.1)
skip=$(grep -a ^' 'tail "${src}" | awk '{print $2}' | cut -b2-)
;;
2.1.1)
skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-);
let skip="skip + 1"
;;
2.1.2)
skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1);
let skip="skip + 1"
;;
2.1.3)
skip=`grep -a ^offset= "${src}" | awk '{print $3}'`;
let skip="skip + 1"
;;
2.1.4 | 2.1.5)
skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1);
skip=$(head -n ${skip} "${src}" | wc -c);
exe="dd"
;;
*)
eerror "I'm sorry, but I was unable to support the Makeself file.";
eerror "The version I detected was '${ver}'.";
eerror "Please file a bug about the file ${shrtsrc} at";
eerror "http://bugs.gentoo.org/ so that support can be added.";
die "makeself version '${ver}' not supported"
;;
esac;
debug-print "Detected Makeself version ${ver} ... using ${skip} as offset";
fi;
case ${exe} in
tail)
exe="tail -n +${skip} '${src}'"
;;
dd)
exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'"
;;
*)
die "makeself cant handle exe '${exe}'"
;;
esac;
local tmpfile=$(emktemp);
eval ${exe} 2> /dev/null | head -c 512 > "${tmpfile}";
local filetype=$(file -b "${tmpfile}");
case ${filetype} in
*tar\ archive*)
eval ${exe} | tar --no-same-owner -xf -
;;
bzip2*)
eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
;;
gzip*)
eval ${exe} | tar --no-same-owner -xzf -
;;
compress*)
eval ${exe} | gunzip | tar --no-same-owner -xf -
;;
*)
eerror "Unknown filetype \"${filetype}\" ?";
false
;;
esac;
_pipestatus="${PIPESTATUS[*]}";
[[ "${_pipestatus// /}" -eq 0 ]] || die "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
}
unpack_pdv ()
{
local src=$(find_unpackable_file "$1");
local sizeoff_t=$2;
[[ -z ${src} ]] && die "Could not locate source for '$1'";
[[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(";
local shrtsrc=$(basename "${src}");
echo ">>> Unpacking ${shrtsrc} to ${PWD}";
local metaskip=$(tail -c ${sizeoff_t} "${src}" | hexdump -e \"%i\");
local tailskip=$(tail -c $((${sizeoff_t}*2)) "${src}" | head -c ${sizeoff_t} | hexdump -e \"%i\");
local metafile=$(emktemp);
tail -c +$((${metaskip}+1)) "${src}" > "${metafile}";
local datafile=$(tail -c +$((${metaskip}+1)) "${src}" | strings | head -n 1);
datafile=$(basename "${datafile}");
local tmpfile=$(emktemp);
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c 512 > ${tmpfile};
local iscompressed=$(file -b "${tmpfile}");
if [[ ${iscompressed:0:8} == "compress" ]]; then
iscompressed=1;
mv ${tmpfile}{,.Z};
gunzip ${tmpfile};
else
iscompressed=0;
fi;
local istar=$(file -b "${tmpfile}");
if [[ ${istar:0:9} == "POSIX tar" ]]; then
istar=1;
else
istar=0;
fi;
if [ ${iscompressed} -eq 1 ]; then
if [ ${istar} -eq 1 ]; then
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar -xzf -;
else
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | gzip -dc > ${datafile};
fi;
else
if [ ${istar} -eq 1 ]; then
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar --no-same-owner -xf -;
else
tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) > ${datafile};
fi;
fi;
true
}
update_depmod ()
{
debug-print-function ${FUNCNAME} $*;
get_version;
ebegin "Updating module dependencies for ${KV_FULL}";
if [ -r ${KV_OUT_DIR}/System.map ]; then
depmod -ae -F ${KV_OUT_DIR}/System.map -b ${ROOT} -r ${KV_FULL};
eend $?;
else
ewarn;
ewarn "${KV_OUT_DIR}/System.map not found.";
ewarn "You must manually update the kernel module dependencies using depmod.";
eend 1;
ewarn;
fi
}
update_moduledb ()
{
debug-print-function ${FUNCNAME} $*;
local MODULEDB_DIR=${ROOT}/var/lib/module-rebuild/;
move_old_moduledb;
if [[ ! -f ${MODULEDB_DIR}/moduledb ]]; then
[[ ! -d ${MODULEDB_DIR} ]] && mkdir -p ${MODULEDB_DIR};
touch ${MODULEDB_DIR}/moduledb;
fi;
if ! grep -qs ${CATEGORY}/${PN}-${PVR} ${MODULEDB_DIR}/moduledb; then
einfo "Adding module to moduledb.";
echo "a:1:${CATEGORY}/${PN}-${PVR}" >> ${MODULEDB_DIR}/moduledb;
fi
}
update_modules ()
{
debug-print-function ${FUNCNAME} $*;
if [ -x /sbin/update-modules ] && grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* > /dev/null 2>&1; then
ebegin "Updating modules.conf";
/sbin/update-modules;
eend $?;
else
if [ -x /sbin/update-modules ] && grep -v -e "^#" -e "^$" ${D}/etc/modules.d/* > /dev/null 2>&1; then
ebegin "Updating modules.conf";
/sbin/update-modules;
eend $?;
fi;
fi
}
use_m ()
{
debug-print-function ${FUNCNAME} $*;
get_version;
[ ${KV_MAJOR} -eq 2 -a ${KV_MINOR} -gt 5 -a ${KV_PATCH} -gt 5 ] && return 0 || return 1
}
validate_desktop_entries ()
{
if [[ -x /usr/bin/desktop-file-validate ]]; then
einfo "Checking desktop entry validity";
local directories="";
for d in /usr/share/applications $@;
do
[[ -d ${D}${d} ]] && directories="${directories} ${D}${d}";
done;
if [[ -n ${directories} ]]; then
for FILE in $(find ${directories} -name "*\.desktop" -not -path '*.hidden*' | sort -u 2>/dev/null);
do
local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
[[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:};
done;
fi;
echo "";
else
einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
fi
}
version_compare ()
{
__versionator_shopt_toggle on;
local ver_a=${1} ver_b=${2} parts_a parts_b cur_idx_a=0 cur_idx_b=0;
parts_a=($(get_all_version_components "${ver_a}" ));
parts_b=($(get_all_version_components "${ver_b}" ));
local inf_loop=0;
while true; do
inf_loop=$(( ${inf_loop} + 1 ));
[[ ${inf_loop} -gt 20 ]] && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
local cur_tok_a=${parts_a[${cur_idx_a}]};
local cur_tok_b=${parts_b[${cur_idx_b}]};
if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
cur_idx_a=$(( ${cur_idx_a} + 1 ));
[[ ${parts_a[${cur_idx_a}]} == "." ]] && cur_idx_a=$(( ${cur_idx_a} + 1 ));
else
cur_tok_a="";
fi;
if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
cur_idx_b=$(( ${cur_idx_b} + 1 ));
[[ ${parts_b[${cur_idx_b}]} == "." ]] && cur_idx_b=$(( ${cur_idx_b} + 1 ));
else
cur_tok_b="";
fi;
[[ -z ${cur_tok_a} ]] && [[ -z ${cur_tok_b} ]] && break;
cur_tok_a=${cur_tok_a##+(0)};
cur_tok_b=${cur_tok_b##+(0)};
[[ -z ${cur_tok_a} ]] && cur_tok_a=0;
[[ -z ${cur_tok_b} ]] && cur_tok_b=0;
[[ ${cur_tok_a} -lt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 1;
[[ ${cur_tok_a} -gt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 3;
done;
local letter_a=;
letter_a=${parts_a[${cur_idx_a}]};
if [[ ${#letter_a} -eq 1 ]] && [[ -z ${letter_a/[a-z]} ]]; then
cur_idx_a=$(( ${cur_idx_a} + 1 ));
else
letter_a="@";
fi;
local letter_b=;
letter_b=${parts_b[${cur_idx_b}]};
if [[ ${#letter_b} -eq 1 ]] && [[ -z ${letter_b/[a-z]} ]]; then
cur_idx_b=$(( ${cur_idx_b} + 1 ));
else
letter_b="@";
fi;
[[ ${letter_a} < ${letter_b} ]] && __versionator_shopt_toggle off && return 1;
[[ ${letter_a} > ${letter_b} ]] && __versionator_shopt_toggle off && return 3;
local suffix rule part r_lt r_gt;
for rule in "alpha=1" "beta=1" "pre=1" "rc=1" "p=3" "r=3";
do
suffix=${rule%%=*};
r_lt=${rule##*=};
[[ ${r_lt} -eq 1 ]] && r_gt=3 || r_gt=1;
local suffix_a=;
for part in ${parts_a[@]};
do
[[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_a=${part#${suffix}}0;
done;
local suffix_b=;
for part in ${parts_b[@]};
do
[[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_b=${part#${suffix}}0;
done;
[[ -z ${suffix_a} ]] && [[ -z ${suffix_b} ]] && continue;
[[ -z ${suffix_a} ]] && __versionator_shopt_toggle off && return ${r_gt};
[[ -z ${suffix_b} ]] && __versionator_shopt_toggle off && return ${r_lt};
suffix_a=${suffix_a##+(0)};
suffix_a=${suffix_a:-0};
suffix_b=${suffix_b##+(0)};
suffix_b=${suffix_b:-0};
[[ ${suffix_a} -lt ${suffix_b} ]] && __versionator_shopt_toggle off && return 1;
[[ ${suffix_a} -gt ${suffix_b} ]] && __versionator_shopt_toggle off && return 3;
done;
__versionator_shopt_toggle off;
return 2
}
version_is_at_least ()
{
__versionator_shopt_toggle on;
local want_s="$1" have_s="${2:-${PVR}}" r;
version_compare "${want_s}" "${have_s}";
r=$?;
case $r in
1 | 2)
__versionator_shopt_toggle off;
return 0
;;
3)
__versionator_shopt_toggle off;
return 1
;;
*)
__versionator_shopt_toggle off;
die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
;;
esac;
__versionator_shopt_toggle off
}
version_sort ()
{
__versionator_shopt_toggle on;
local items= left=0;
items=($@);
while [[ ${left} -lt ${#items[@]} ]]; do
local lowest_idx=${left};
local idx=$(( ${lowest_idx} + 1 ));
while [[ ${idx} -lt ${#items[@]} ]]; do
version_compare "${items[${lowest_idx}]}" "${items[${idx}]}";
[[ $? -eq 3 ]] && lowest_idx=${idx};
idx=$(( ${idx} + 1 ));
done;
local tmp=${items[${lowest_idx}]};
items[${lowest_idx}]=${items[${left}]};
items[${left}]=${tmp};
left=$(( ${left} + 1 ));
done;
echo ${items[@]};
__versionator_shopt_toggle off
}
declare -x ALSA_CARDS=" ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci"
declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"
declare -x APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
declare -x ARCH="x86"
declare -x CBUILD="i686-pc-linux-gnu"
declare -x CDEFINE_default="__unix__"
declare -x CFLAGS="-O2 -march=i686 -pipe"
declare -x CFLAGS_default=""
declare -x CHOST="i686-pc-linux-gnu"
declare -x CHOST_default="i686-pc-linux-gnu"
declare -x CROSSCOMPILE_OPTS=""
declare -x CTARGET_default="i686-pc-linux-gnu"
declare -x CVS_RSH="ssh"
declare -x CXXFLAGS="-O2 -march=i686 -pipe"
declare -x DEFAULT_ABI="default"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -x EAPI="0"
declare -x ELIBC="glibc"
declare -x EXEOPTIONS="-m0755"
declare -x FEATURES="distlocks fixpackages parallel-fetch protect-owned sandbox sfperms strict unmerge-orphans userfetch"
declare -x GCC_SPECS=""
declare -x GDK_USE_XFT="1"
declare -x INHERITED="toolchain-funcs portability flag-o-matic versionator multilib libtool linux-info autotools linux-mod eutils"
declare -x INPUT_DEVICES="keyboard mouse"
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="default"
declare -x KEYWORDS="~alpha ~amd64 ~mips ~ppc ~ppc64 ~x86"
declare -x KV="2.6.25-gentoo-r8"
declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
declare -x LDFLAGS="-Wl,-O1"
declare -x LDFLAGS_default=""
declare -x LIBDIR_default="lib"
declare -x LIBOPTIONS="-m0644"
declare -x LICENSE="GPL-2"
declare -x MAKEOPTS="-j3"
declare -x MULTILIB_ABIS="default"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OPENGL_PROFILE="nvidia"
declare -x PKG_CONFIG_PATH="/usr/qt/3/lib/pkgconfig"
declare -x PORTAGE_COMPRESS_EXCLUDE_SUFFIXES="css gif htm[l]? jp[e]?g js pdf png"
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC KERNEL USERLAND"
declare -x PROPERTIES=""
declare -x PROVIDE="virtual/alsa"
declare -x QMAKESPEC="linux-g++"
declare -x QTDIR="/usr/qt/3"
declare -x RESTRICT=""
declare -x S="/var/tmp/portage/media-sound/alsa-driver-1.0.18a/work/alsa-driver-1.0.18a"
declare -x SANDBOX_DENY="/etc/ld.so.preload"
declare -x SANDBOX_PREDICT=":/dev/console:/dev/random:/proc/self/maps:/usr/lib/python2.0/:/usr/lib/python2.1/:/usr/lib/python2.2/:/usr/lib/python2.3/:/usr/lib/python2.4/:/usr/lib/python2.5/:/usr/lib/python3.0/:/var/db/aliases.db:/var/db/ethers.db:/var/db/group.db:/var/db/hosts.db:/var/db/netgroup.db:/var/db/netmasks.db:/var/db/networks.db:/var/db/passwd.db:/var/db/protocols.db:/var/db/rpc.db:/var/db/services.db:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.:"
declare -x SANDBOX_READ=":/:/dev/shm:/dev/stdin:/var/tmp:"
declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/shm/ngpt:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.bash_history:/var/tmp/portage/media-sound/alsa-driver-1.0.18a/homedir/.gconfd/lock:"
declare -x SGML_CATALOG_FILES="/etc/sgml/sgml-docbook.cat:/etc/sgml/sgml-docbook-3.1.cat:/etc/sgml/sgml-ent.cat:/etc/sgml/openjade-1.3.2.cat:/etc/sgml/dsssl-docbook-stylesheets.cat:/etc/sgml/sgml-lite.cat"
declare -x SLOT="0"
declare -x USE="alsa_cards_ali5451 alsa_cards_als4000 alsa_cards_atiixp alsa_cards_atiixp-modem alsa_cards_bt87x alsa_cards_ca0106 alsa_cards_cmipci alsa_cards_emu10k1 alsa_cards_emu10k1x alsa_cards_ens1370 alsa_cards_ens1371 alsa_cards_es1938 alsa_cards_es1968 alsa_cards_fm801 alsa_cards_hda-intel alsa_cards_intel8x0 alsa_cards_intel8x0m alsa_cards_maestro3 alsa_cards_trident alsa_cards_usb-audio alsa_cards_via82xx alsa_cards_via82xx-modem alsa_cards_ymfpci elibc_glibc kernel_linux midi userland_GNU x86"
declare -x USERLAND="GNU"
declare -x VIDEO_CARDS=""
declare -x WANT_AUTOCONF="2.5"
declare -x WANT_AUTOMAKE="1.10"
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -x repository="gentoo"
[-- Attachment #3: build.log --]
[-- Type: application/octet-stream, Size: 43289 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [gentoo-user] Re: Failed to emerge media-sound/alsa-driver-1.0.18a
2009-01-22 2:01 [gentoo-user] Failed to emerge media-sound/alsa-driver-1.0.18a Guillermo Garron
2009-01-22 2:26 ` [gentoo-user] " Guillermo Garron
@ 2009-01-22 2:40 ` Guillermo Garron
1 sibling, 0 replies; 3+ messages in thread
From: Guillermo Garron @ 2009-01-22 2:40 UTC (permalink / raw
To: gentoo-user
Hi,
Sorry for top-posting, but I needed to let you know that after
upgrading the Kernel from 2.6.25-gentoo-r8 to 2.6.27-gentoo-r8, I was
able to compile it!
thanks!
On Wed, Jan 21, 2009 at 10:01 PM, Guillermo Garron
<guillermo.fedora@gmail.com> wrote:
> Hi,
>
> I have tried to make a full upgrade of my system.
>
> Using
> emerge --update --newuse --deep world
>
> but I got this error:
> *********************************************************
> Failed to emerge media-sound/alsa-driver-1.0.18a, Log file:
>
>>>> '/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/build.log'
>
> * Messages for package media-sound/alsa-driver-1.0.18a:
>
> *
> * ERROR: media-sound/alsa-driver-1.0.18a failed.
> * Call stack:
> * ebuild.sh, line 49: Called src_compile
> * environment, line 3951: Called die
> * The specific snippet of code:
> * emake LDFLAGS="$(raw-ldflags)" HOSTCC="$(tc-getBUILD_CC)"
> CC="$(tc-getCC)" || die "Make Failed";
> * The die message:
> * Make Failed
> *
> * If you need support, post the topmost build error, and the call
> stack if relevant.
> * A complete build log is located at
> '/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/build.log'.
> * The ebuild environment file is located at
> '/var/tmp/portage/media-sound/alsa-driver-1.0.18a/temp/environment'.
> *
> ***************************************************************************
>
> I am not new to Linux, but I use mostly Debian, and I am new to
> Gentoo, so actually I am stucked here for two weeks :(.
>
> I am also attaching the files it mentions in the above message.
>
> please help me.
>
> regards,
>
>
> --
> Guillermo Garron
> "Linux IS user friendly... It's just selective about who its friends are."
> (Using Gentoo, Debian, Crunchbang, Ubuntu)
> http://feeds.feedburner.com/go2linux
> http://www.go2linux.org
>
--
Guillermo Garron
"Linux IS user friendly... It's just selective about who its friends are."
(Using FC6, CentOS4.4 and Ubuntu 6.06)
http://feeds.feedburner.com/go2linux
http://www.go2linux.org
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-01-22 2:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-22 2:01 [gentoo-user] Failed to emerge media-sound/alsa-driver-1.0.18a Guillermo Garron
2009-01-22 2:26 ` [gentoo-user] " Guillermo Garron
2009-01-22 2:40 ` Guillermo Garron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox