ABI=amd64 ALSA_CARDS=intel8x0 ALSA_PCM_PLUGINS='adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol' AMD64_NV_PACKAGE=NVIDIA-Linux-x86_64-169.09 ANT_HOME=/usr/share/ant-core APACHE2_MODULES='actions alias auth_basic auth_digest authn_anon authn_dbd 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 dbd deflate dir disk_cache env expires ext_filter file_cache filter headers ident imagemap include info log_config logio mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_http rewrite setenvif so speling status unique_id userdir usertrack vhost_alias' ARCH=amd64 ASFLAGS_x86=--32 BUILD_PARAMS=$'IGNORE_CC_MISMATCH=yes V=1 SYSSRC=/usr/src/linux \t\tSYSOUT=/lib/modules/2.6.25/build HOST_CC=x86_64-pc-linux-gnu-gcc' CBUILD=x86_64-pc-linux-gnu CDEFINE_amd64=__x86_64__ CDEFINE_default=__unix__ CDEFINE_x86=__i386__ CFLAGS='-march=athlon64 -O2 -pipe' CFLAGS_default= CFLAGS_x86='-m32 -L/emul/linux/x86/lib -L/emul/linux/x86/usr/lib' CHOST=x86_64-pc-linux-gnu CHOST_amd64=x86_64-pc-linux-gnu CHOST_default=x86_64-pc-linux-gnu CHOST_x86=i686-pc-linux-gnu CLASSPATH=. COMMON=$'x11-base/xorg-server\n\tmultilib? ( app-emulation/emul-linux-x86-xlibs )\n\tkernel_FreeBSD? ( !media-video/nvidia-freebsd )\n\t!app-emulation/emul-linux-x86-nvidia\n\t!x11-drivers/nvidia-legacy-drivers' CTARGET_default=x86_64-pc-linux-gnu CVS_RSH=ssh CXXFLAGS='-march=athlon64 -O2 -pipe' DEBUGBUILD=1 DEFAULT_ABI=amd64 DEPEND=$'x11-base/xorg-server\n\tmultilib? ( app-emulation/emul-linux-x86-xlibs )\n\tkernel_FreeBSD? ( !media-video/nvidia-freebsd )\n\t!app-emulation/emul-linux-x86-nvidia\n\t!x11-drivers/nvidia-legacy-drivers\n\tkernel_linux? ( virtual/linux-sources )\n\tapp-admin/eselect-opengl kernel_linux? ( virtual/linux-sources ) kernel_linux? ( virtual/modutils )\n\tsys-apps/sed sys-apps/pciutils' DESCRIPTION='NVIDIA X11 driver and GLX libraries' DESTTREE=/usr DIROPTIONS=-m0755 EAPI= ELIBC=glibc EMULTILIB_PKG=true 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/x11-drivers/nvidia-drivers-169.09-r1/work/patch EPATCH_SUFFIX=patch.bz2 EXEOPTIONS=-m0755 FEATURES='distlocks fixpackages metadata-transfer parallel-fetch sandbox sfperms strict unmerge-orphans userfetch' GCC_SPECS= GDK_USE_XFT=1 GENERATION=2 HOMEPAGE=http://www.nvidia.com/ HUSHLOGIN=FALSE INHERITED='nvidia-driver toolchain-funcs portability flag-o-matic versionator multilib linux-info linux-mod eutils' INPUT_DEVICES='keyboard mouse evdev' INSDESTTREE= INSOPTIONS=-m0644 IUSE=' acpi custom-cflags gtk multilib kernel_linux kernel_linux' JAVAC=/etc/java-config-2/current-system-vm/bin/javac JAVA_HOME=/etc/java-config-2/current-system-vm JDK_HOME=/etc/java-config-2/current-system-vm KERNEL=linux KERNEL_ABI=amd64 KERNEL_DIR=/usr/src/linux KEYWORDS='-* amd64 x86' KV=2.6.25 KV_DIR=/usr/src/linux KV_EXTRA= KV_FULL=2.6.25 KV_LOCAL= KV_MAJOR=2 KV_MINOR=6 KV_OBJ=ko KV_OUT_DIR=/lib/modules/2.6.25/build KV_PATCH=25 LANG=en_US.UTF-8 LCD_DEVICES='bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text' LC_ADDRESS=en_US.UTF-8 LC_COLLATE=en_US.UTF-8 LC_CTYPE=zh_CN.UTF-8 LC_IDENTIFICATION=en_US.UTF-8 LC_MEASUREMENT=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_NAME=en_US.UTF-8 LC_NUMERIC=en_US.UTF-8 LC_PAPER=en_US.UTF-8 LC_TELEPHONE=en_US.UTF-8 LC_TIME=en_US.UTF-8 LDFLAGS_default= LDFLAGS_x86='-m elf_i386 -L/emul/linux/x86/lib -L/emul/linux/x86/usr/lib' LIBDIR_amd64=lib64 LIBDIR_default=lib LIBDIR_x86=lib32 LIBOPTIONS=-m0644 LICENSE=NVIDIA MAKEOPTS=-j2 MODULE_NAMES='nvidia(video:/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/work/NVIDIA-Linux-x86_64-169.09-pkg2/usr/src/nv)' MULTILIB_ABIS='amd64 x86' MULTILIB_STRICT_DENY='64-bit.*shared object' MULTILIB_STRICT_DIRS='/lib /usr/lib /usr/kde/*/lib /usr/qt/*/lib /usr/X11R6/lib' MULTILIB_STRICT_EXEMPT='(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage)' NV_DOC=/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/work/NVIDIA-Linux-x86_64-169.09-pkg2/usr/share/doc NV_EXEC=/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/work/NVIDIA-Linux-x86_64-169.09-pkg2/usr/bin NV_PACKAGE=NVIDIA-Linux-x86_64-169.09 NV_SRC=/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/work/NVIDIA-Linux-x86_64-169.09-pkg2/usr/src/nv OPENGL_PROFILE=nvidia OUTPUT_DIR=/lib/modules/2.6.25/build PDEPEND='gtk? ( media-video/nvidia-settings ) ' PKG_V=-pkg2 PROVIDE= PYTHONPATH=/usr/lib64/portage/pym QA_EXECSTACK_amd64=$'usr/lib32/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib32/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib64/xorg/modules/drivers/nvidia_drv.so\n\tusr/lib64/libXvMCNVIDIA.so.169.09\n\tusr/lib64/opengl/nvidia/tls/libnvidia-tls.so.169.09\n\tusr/lib64/opengl/nvidia/no-tls/libnvidia-tls.so.169.09\n\tusr/lib64/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib64/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib64/opengl/nvidia/lib/libnvidia-cfg.so.169.09\n\tusr/lib64/opengl/nvidia/extensions/libglx.so\n\tusr/bin/nvidia-xconfig' QA_EXECSTACK_x86=$'usr/lib/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib/opengl/nvidia/extensions/libglx.so' QA_TEXTRELS_amd64=$'usr/lib32/opengl/nvidia/tls/libnvidia-tls.so.169.09\n\tusr/lib32/opengl/nvidia/no-tls/libnvidia-tls.so.169.09\n\tusr/lib32/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib32/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib32/opengl/nvidia/lib/libnvidia-cfg.so.169.09\n\tusr/lib32/libcuda.so.169.09' QA_TEXTRELS_x86=$'usr/lib/libXvMCNVIDIA.so.169.09\n\tusr/lib/opengl/nvidia/no-tls/libnvidia-tls.so.169.09\n\tusr/lib/opengl/nvidia/tls/libnvidia-tls.so.169.09\n\tusr/lib/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib/opengl/nvidia/lib/libnvidia-cfg.so.169.09\n\tusr/lib/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib/opengl/nvidia/extensions/libglx.so\n\tusr/lib/xorg/modules/drivers/nvidia_drv.so\n\tusr/lib/libcuda.so.169.09' QA_TEXTRELS_x86_fbsd=$'boot/modules/nvidia.ko\n\tusr/lib/opengl/nvidia/lib/libGL.so.1\n\tusr/lib/opengl/nvidia/lib/libGLcore.so.1\n\tusr/lib/opengl/nvidia/lib/libnvidia-cfg.so.1\n\tusr/lib/opengl/nvidia/no-tls/libnvidia-tls.so.1\n\tusr/lib/opengl/nvidia/extensions/libglx.so\n\tusr/lib/xorg/modules/drivers/nvidia_drv.so' QA_WX_LOAD_amd64=$'usr/lib32/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib32/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib64/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib64/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib64/opengl/nvidia/extensions/libglx.so' QA_WX_LOAD_x86=$'usr/lib/opengl/nvidia/lib/libGLcore.so.169.09\n\tusr/lib/opengl/nvidia/lib/libGL.so.169.09\n\tusr/lib/opengl/nvidia/extensions/libglx.so' RDEPEND=$'x11-base/xorg-server\n\tmultilib? ( app-emulation/emul-linux-x86-xlibs )\n\tkernel_FreeBSD? ( !media-video/nvidia-freebsd )\n\t!app-emulation/emul-linux-x86-nvidia\n\t!x11-drivers/nvidia-legacy-drivers\n\tkernel_linux? ( virtual/modutils )\n\tmedia-libs/mesa\n\tacpi? ( sys-power/acpid ) kernel_linux? ( virtual/modutils )' RESTRICT=strip S=/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/work/NVIDIA-Linux-x86_64-169.09-pkg2 SANDBOX_DENY=/etc/ld.so.preload SANDBOX_PREDICT=:/dev/console:/dev/random:/proc/self/maps:/usr/lib64/portage/pym:/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/cache/edb/dep:/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/x11-drivers/nvidia-drivers-169.09-r1/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/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/lib/cf:/usr/lib/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/homedir/.bash_history:/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/homedir/.gconfd/lock: SLOT=0 SRC_URI=$'x86? ( http://us.download.nvidia.com/XFree86/Linux-x86/169.09/NVIDIA-Linux-x86-169.09-pkg0.run )\n\t amd64? ( http://us.download.nvidia.com/XFree86/Linux-x86_64/169.09/NVIDIA-Linux-x86_64-169.09-pkg2.run )' STAGE1_USE='nptl nptlonly unicode' SYMLINK_LIB=yes USE='acpi amd64 elibc_glibc gtk kernel_linux userland_GNU' USERLAND=GNU VIDEO_CARDS='nvidia nv' VMHANDLE=blackdown-jdk-1.4.2 X86_FBSD_NV_PACKAGE=NVIDIA-FreeBSD-x86-169.09 X86_NV_PACKAGE=NVIDIA-Linux-x86-169.09 _=_RC_GET_KV_CACHE _E_DOCDESTTREE_= _E_EXEDESTTREE_= _POSIX2_VERSION=199209 ___ECLASS_RECUR_MULTILIB=yes ___ECLASS_RECUR_TOOLCHAIN_FUNCS=yes conf=nvidia-drivers-169.09-r1 drv_71xx='0020 0028 0029 002c 002d 00a0 0100 0101 0103 0150 0151 0152 0153' drv_96xx='0110 0111 0112 0113 0170 0171 0172 0173 0174 0175 0176 0177 0178 0179 017a 017c 017d 0181 0182 0183 0185 0188 018a 018b 018c 01a0 01f0 0200 0201 0202 0203 0250 0251 0253 0258 0259 025b 0280 0281 0282 0286 0288 0289 028c' mask_71xx='>=x11-drivers/nvidia-drivers-72.0.0' mask_96xx='>=x11-drivers/nvidia-drivers-97.0.0' str='use_m: entering function' __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 } _epatch_assert () { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] } _epatch_draw_line () { [[ -z $1 ]] && set "$(printf "%65s" '')"; echo "${1//?/=}" } _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 -fno-stack-protector ;; -fstack-protector-all) gcc-specs-ssp-to-all || continue; is-flagq -fno-stack-protector-all || append-flags -fno-stack-protector-all ;; 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-flags () { [[ -z $* ]] && return 0; export CFLAGS="${CFLAGS} $*"; export CXXFLAGS="${CXXFLAGS} $*"; return 0 } append-ldflags () { [[ -z $* ]] && return 0; 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 } bashrc_has () { [[ " ${*:2} " == *" $1 "* ]] } bindnow-flags () { ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild" 1>&2; case $($(tc-getLD) -v 2>&1 &1 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 } 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} ) } donvidia () { dodir $1; exeinto $1; libname=$(basename $2); doexe $2.$3; dosym ${libname}.$3 $1/${libname}; [[ $3 != "1" ]] && dosym ${libname}.$3 $1/${libname}.1 } 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 } 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 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##*/}; while [ "${count}" -lt 5 ]; do _epatch_draw_line "***** ${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##*/}; else PATCH_TARGET="${x}"; fi; 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 [ "${PATCH_SUFFIX}" != "patch" ]; then if ! ( ${PIPE_CMD} ${x} > ${PATCH_TARGET} ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then echo; eerror "Could not extract patch!"; count=5; break; fi; fi; 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 "$@"; 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 } filter_invalid_flags () { local flag broken_flags; eval broken_flags=($(get_broken_flags $(getPROG CC gcc) c ${CFLAGS})); for flag in "${broken_flags[@]}"; do ewarn "Filtering out invalid CFLAG \"${flag}\""; CFLAGS="$(remove_flag "${flag}" ${CFLAGS})"; done; eval broken_flags=($(get_broken_flags $(getPROG CXX g++) c++ ${CXXFLAGS})); for flag in "${broken_flags[@]}"; do ewarn "Filtering out invalid CXXFLAG \"${flag}\""; CXXFLAGS="$(remove_flag "${flag}" ${CXXFLAGS})"; done } 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-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} $*; 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}; do if [ "${f/${findflag}}" != "${f}" ]; then printf "%s\n" "${f/-${findflag}=}"; return 0; fi; done; return 1 } getPROG () { local var=$1 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}" } 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_broken_flags () { local myprog="${1}" lang="${2}"; shift 2; echo 'main(){}' | LC_ALL=C ${myprog} ${@} -x ${lang} -o /dev/null - 2>&1 | egrep "unrecognized .*option" | egrep -o -- '('\''|\"|`)-.*' | sed -r 's/('\''|`|")//g; s/^/"/; s/$/"/'; echo 'main(){}' | LC_ALL=C ${myprog} ${@} -x ${lang} -o /dev/null - 2>&1 | egrep "unrecognised debug output" | egrep -o -- '('\''|\"|`).*' | sed -r 's/('\''|`|")//g; s/^/"-g/; s/$/"/' } 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 *-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 workingdir 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 "; else workingdir="${PWD}"; basefname="$(basename ${2})"; basedname="$(dirname ${2})"; unset ARCH; cd "${basedname}"; echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | make M="${S}" ${BUILD_FIXES} -s -f - 2> /dev/null; cd "${workingdir}"; 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-all } is-flag () { is-flagq "$@" && echo true } is-flagq () { [[ -n $2 ]] && die "Usage: is-flag "; _is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 } is-ldflag () { is-ldflagq "$@" && echo true } is-ldflagq () { [[ -n $2 ]] && die "Usage: is-ldflag "; _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 myARCH="${ARCH}" myABI="${ABI}"; ARCH="$(tc-arch-kernel)"; ABI="${KERNEL_ABI}"; BUILD_TARGETS=${BUILD_TARGETS:-clean module}; strip_modulenames; cd "${S}"; 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}; 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)\" CC=\"$(get-KERNEL_CC)\" LDFLAGS=\"$(get_abi_LDFLAGS)\" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS} " || die "Unable to emake HOSTCC="$(tc-getBUILD_CC)" CC="$(get-KERNEL_CC)" LDFLAGS="$(get_abi_LDFLAGS)" ${BUILD_FIXES} ${BUILD_PARAMS} ${BUILD_TARGETS}"; touch ${srcdir}/.built; cd ${OLDPWD}; fi; done; ARCH="${myARCH}"; 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}" < /etc/portage/package.mask/nvidia-drivers"; else ewarn "echo \"$NVIDIA_MASK\" >> /etc/portage/package.mask"; fi; ewarn; ewarn "Failure to perform the steps above could result in a non-working"; ewarn "X setup."; ewarn; ewarn "For more information please read:"; ewarn "http://www.nvidia.com/object/IO_32667.html"; ebeep 5; fi; fi } nvidia-driver-get-card () { local NVIDIA_CARD="$(/usr/sbin/lspci -d 10de: -n | awk '/ 0300: /{print $3}' | cut -d: -f2 | tr '\n' ' ')"; if [ -n "$NVIDIA_CARD" ]; then echo "$NVIDIA_CARD"; else echo "0000"; fi } nvidia-driver-get-mask () { local NVIDIA_CARDS="$(nvidia-driver-get-card)"; for card in $NVIDIA_CARDS; do for drv in $drv_96xx; do if [ "x$card" = "x$drv" ]; then echo "$mask_96xx"; return 0; fi; done; for drv in $drv_71xx; do if [ "x$card" = "x$drv" ]; then echo "$mask_71xx"; return 0; fi; done; done; echo ""; return 1 } paravirt_check () { ebegin "Checking for Paravirtualized guest support"; linux_chkconfig_present PARAVIRT; if [[ $? -eq 0 ]]; then eerror "Please disable PARAVIRT in your kernel config, found at:"; eerror; eerror " Processor type and features"; eerror " [*] Paravirtualized guest support"; eerror; eerror "or XEN support"; eerror; eerror "and recompile your kernel .."; die "PARAVIRT support detected!"; fi } pkg_nofetch () { [ -z "${SRC_URI}" ] && return; echo "!!! The following are listed in SRC_URI for ${PN}:"; local x; for x in $(echo ${SRC_URI}); do echo "!!! ${x}"; done } pkg_postinst () { if use kernel_linux; then linux-mod_pkg_postinst; fi; eselect opengl set --use-old nvidia; echo; elog "You must be in the video group to use the NVIDIA device"; elog "For more info, read the docs at"; elog "http://www.gentoo.org/doc/en/nvidia-guide.xml#doc_chap3_sect6"; elog; elog "This ebuild installs a kernel module and X driver. Both must"; elog "match explicitly in their version. This means, if you restart"; elog "X, you most modprobe -r nvidia before starting it back up"; elog; elog "To use the NVIDIA GLX, run \"eselect opengl set nvidia\""; elog; elog "nVidia has requested that any bug reports submitted have the"; elog "output of /usr/bin/nvidia-bug-report.sh included."; elog; elog "To work with compiz, you must enable the AddARGBGLXVisuals option."; elog; elog "If you are having resolution problems, try disabling DynamicTwinView."; echo } pkg_postrm () { if use kernel_linux; then linux-mod_pkg_postrm; fi; eselect opengl set --use-old xorg-x11 } pkg_preinst () { if [ -d "${ROOT}"/usr/lib/opengl/nvidia ]; then rm -rf "${ROOT}"/usr/lib/opengl/nvidia/*; fi; if [ -e "${ROOT}"/etc/env.d/09nvidia ]; then rm -f "${ROOT}"/etc/env.d/09nvidia; fi } pkg_setup () { export DISTCC_DISABLE=1; export CCACHE_DISABLE=1; if use amd64 && has_multilib_profile && [ "${DEFAULT_ABI}" != "amd64" ]; then eerror "This ebuild doesn't currently support changing your default abi."; die "Unexpected \${DEFAULT_ABI} = ${DEFAULT_ABI}"; fi; if use kernel_linux; then linux-mod_pkg_setup; MODULE_NAMES="nvidia(video:${S}/usr/src/nv)"; BUILD_PARAMS="IGNORE_CC_MISMATCH=yes V=1 SYSSRC=${KV_DIR} SYSOUT=${KV_OUT_DIR} HOST_CC=$(tc-getBUILD_CC)"; mtrr_check; paravirt_check; fi; use userland_BSD && MAKE="$(get_bmake)"; export _POSIX2_VERSION="199209"; nvidia-driver-check-warning; if use kernel_FreeBSD; then NV_DOC="${S}/doc"; NV_EXEC="${S}/obj"; NV_SRC="${S}/src"; else if use kernel_linux; then NV_DOC="${S}/usr/share/doc"; NV_EXEC="${S}/usr/bin"; NV_SRC="${S}/usr/src/nv"; else die "Could not determine proper NVIDIA package"; fi; 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 [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_flag () { local remove="${1}"; shift; while [[ -n "${1}" ]]; do [[ "${1}" != "${remove}" ]] && echo -n "${1} "; shift; done } 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 " && die "replace-flags takes 2 arguments, not $#"; local f fset; declare -a new_CFLAGS new_CXXFLAGS; for fset in CFLAGS CXXFLAGS; 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"; 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"; 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 -D*"; export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks"; return 0 } src_compile () { cd "${NV_SRC}"; if use x86-fbsd; then MAKE="$(get_bmake)" CFLAGS="-Wno-sign-compare" emake CC="$(tc-getCC)" LD="$(tc-getLD)" LDFLAGS="$(raw-ldflags)" || die; else if use kernel_linux; then linux-mod_src_compile; fi; fi } src_install () { local MLTEST=$(type dyn_unpack); cd "${S}"; if use kernel_linux; then linux-mod_src_install; VIDEOGROUP="$(egetent group video | cut -d ':' -f 3)"; if [ -z "$VIDEOGROUP" ]; then eerror "Failed to determine the video group gid."; die "Failed to determine the video group gid."; fi; [ -f "${FILESDIR}/nvidia" ] || die "nvidia missing in FILESDIR"; sed -e 's:PACKAGE:'${PF}':g' -e 's:VIDEOGID:'${VIDEOGROUP}':' "${FILESDIR}"/nvidia-169.07 > "${WORKDIR}"/nvidia; insinto /etc/modules.d; doins "${WORKDIR}"/nvidia || die; else if use x86-fbsd; then insinto /boot/modules; doins "${WORKDIR}/${NV_PACKAGE}/src/nvidia.kld" || die; exeinto /boot/modules; doexe "${WORKDIR}/${NV_PACKAGE}/src/nvidia.ko" || die; fi; fi; if has_multilib_profile; then local OABI=${ABI}; for ABI in $(get_install_abis); do src_install-libs; done; ABI=${OABI}; unset OABI; else if use amd64; then src_install-libs lib32 $(get_multilibdir); src_install-libs lib $(get_libdir); rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/include; rm -rf "${D}"/usr/$(get_multilibdir)/opengl/nvidia/extensions; else src_install-libs; fi; fi; is_final_abi || return 0; dodoc "${NV_DOC}"/{XF86Config.sample,Copyrights}; dohtml "${NV_DOC}"/html/*; if use x86-fbsd; then dodoc "${NV_DOC}/README"; else newdoc "${NV_DOC}/README.txt" README; dodoc "${NV_DOC}/NVIDIA_Changelog"; fi; dobin ${NV_EXEC}/nvidia-xconfig || die; dobin ${NV_EXEC}/nvidia-bug-report.sh || die } src_install-libs () { local pkglibdir=lib; local inslibdir=$(get_libdir); if [[ ${#} -eq 2 ]]; then pkglibdir=${1}; inslibdir=${2}; else if has_multilib_profile && [[ ${ABI} == "x86" ]]; then pkglibdir=lib32; fi; fi; local usrpkglibdir=usr/${pkglibdir}; local libdir=usr/X11R6/${pkglibdir}; local drvdir=${libdir}/modules/drivers; local extdir=${libdir}/modules/extensions; local incdir=usr/include/GL; local sover=${PV}; local NV_ROOT="/usr/${inslibdir}/opengl/nvidia"; local NO_TLS_ROOT="${NV_ROOT}/no-tls"; local TLS_ROOT="${NV_ROOT}/tls"; local X11_LIB_DIR="/usr/${inslibdir}/xorg"; if use x86-fbsd; then pkglibdir=obj; usrpkglibdir=obj; x11pkglibdir=obj; drvdir=obj; extdir=obj; incdir=doc; sover=1; fi; donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGL.so ${sover}; donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libGLcore.so ${sover}; donvidia ${NV_ROOT}/lib ${usrpkglibdir}/libnvidia-cfg.so ${sover}; dodir ${NO_TLS_ROOT}; donvidia ${NO_TLS_ROOT} ${usrpkglibdir}/libnvidia-tls.so ${sover}; if ! use x86-fbsd; then donvidia ${TLS_ROOT} ${usrpkglibdir}/tls/libnvidia-tls.so ${sover}; fi; if want_tls; then dosym ../tls/libnvidia-tls.so ${NV_ROOT}/lib; dosym ../tls/libnvidia-tls.so.1 ${NV_ROOT}/lib; dosym ../tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib; else dosym ../no-tls/libnvidia-tls.so ${NV_ROOT}/lib; dosym ../no-tls/libnvidia-tls.so.1 ${NV_ROOT}/lib; dosym ../no-tls/libnvidia-tls.so.${sover} ${NV_ROOT}/lib; fi; if ! use x86-fbsd; then [ -f "${FILESDIR}/libGL.la-r2" ] || die "libGL.la-r2 missing in FILESDIR"; local ver1=$(get_version_component_range 1); local ver2=$(get_version_component_range 2); local ver3=$(get_version_component_range 3); sed -e "s:\${PV}:${PV}:" -e "s:\${ver1}:${ver1}:" -e "s:\${ver2}:${ver2}:" -e "s:\${ver3}:${ver3}:" -e "s:\${libdir}:${inslibdir}:" "${FILESDIR}"/libGL.la-r2 > "${D}"/${NV_ROOT}/lib/libGL.la; fi; exeinto ${X11_LIB_DIR}/modules/drivers; [[ -f ${drvdir}/nvidia_drv.so ]] && doexe ${drvdir}/nvidia_drv.so; insinto /usr/${inslibdir}; [[ -f ${libdir}/libXvMCNVIDIA.a ]] && doins ${libdir}/libXvMCNVIDIA.a; exeinto /usr/${inslibdir}; [[ -f ${libdir}/libXvMCNVIDIA.so.${PV} ]] && doexe ${libdir}/libXvMCNVIDIA.so.${PV} && dosym libXvMCNVIDIA.so.${PV} /usr/${inslibdir}/libXvMCNVIDIA.so; exeinto ${NV_ROOT}/extensions; [[ -f ${libdir}/modules/libnvidia-wfb.so.${sover} ]] && newexe ${libdir}/modules/libnvidia-wfb.so.${sover} libwfb.so; [[ -f ${extdir}/libglx.so.${sover} ]] && newexe ${extdir}/libglx.so.${sover} libglx.so; insinto ${NV_ROOT}/include; doins ${incdir}/*.h; if [[ -f usr/include/cuda/cuda.h ]]; then dodir /usr/include/cuda; insinto /usr/include/cuda; doins usr/include/cuda/*.h; dolib.so usr/${pkglibdir}/libcuda.so.${PV}; dosym libcuda.so.${PV} /usr/${inslibdir}/libcuda.so.1; dosym libcuda.so.1 /usr/${inslibdir}/libcuda.so; fi } src_test () { if emake -j1 check -n >&/dev/null; then vecho ">>> Test phase [check]: ${CATEGORY}/${PF}"; if ! emake -j1 check; then hasq test $FEATURES && die "Make check failed. See above for details."; hasq test $FEATURES || eerror "Make check failed. See above for details."; fi; else if emake -j1 test -n >&/dev/null; then vecho ">>> Test phase [test]: ${CATEGORY}/${PF}"; if ! emake -j1 test; then hasq test $FEATURES && die "Make test failed. See above for details."; hasq test $FEATURES || eerror "Make test failed. See above for details."; fi; else vecho ">>> Test phase [none]: ${CATEGORY}/${PF}"; fi; fi } src_unpack () { if use kernel_linux && kernel_is lt 2 6 7; then echo; ewarn "Your kernel version is ${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}"; ewarn "This is not officially supported for ${P}. It is likely you"; ewarn "will not be able to compile or use the kernel module."; ewarn "It is recommended that you upgrade your kernel to a version >= 2.6.7"; echo; ewarn "DO NOT file bug reports for kernel versions less than 2.6.7 as they will be ignored."; fi; if ! use x86-fbsd; then cd "${WORKDIR}"; bash "${DISTDIR}"/${NV_PACKAGE}${PKG_V}.run --extract-only; else unpack ${A}; fi; cd "${S}"; use x86-fbsd && cd doc; epatch "${FILESDIR}"/NVIDIA_glx-defines.patch; epatch "${FILESDIR}"/NVIDIA_glx-glheader.patch; if use kernel_linux; then epatch "${FILESDIR}"/NVIDIA_i2c-hwmon.patch; fi; if use kernel_linux; then sed -i -e 's:-Wpointer-arith::g' -e 's:-Wsign-compare::g' "${NV_SRC}"/Makefile.kbuild; use custom-cflags && sed -i "s:-O:${CFLAGS}:" Makefile.*; convert_to_m "${NV_SRC}"/Makefile.kbuild; fi } strip-flags () { local x y flag NEW_CFLAGS NEW_CXXFLAGS; setup-allowed-flags; local NEW_CFLAGS=""; local NEW_CXXFLAGS=""; 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; 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; set +f; export CFLAGS="${NEW_CFLAGS}"; export CXXFLAGS="${NEW_CXXFLAGS}"; 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}) } 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 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-getF90 () { tc-getPROG F90 gfortran "$@" } tc-getFORTRAN () { tc-getPROG FORTRAN 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) ]]; 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-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-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 } 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 } want_tls () { has_version sys-libs/glibc || return 1; has_version '=sys-libs/glibc-2.3.5'; then case ${CHOST/-*} in i486 | i586) return 1 ;; esac; fi; has_version '>=sys-libs/glibc-2.3.4.20040619-r2' && return 0; return 1 } declare -x ABI="amd64" declare -x ALSA_CARDS="intel8x0" declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" declare -x ANT_HOME="/usr/share/ant-core" declare -x APACHE2_MODULES="actions alias auth_basic auth_digest authn_anon authn_dbd 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 dbd deflate dir disk_cache env expires ext_filter file_cache filter headers ident imagemap include info log_config logio mem_cache mime mime_magic negotiation proxy proxy_ajp proxy_balancer proxy_connect proxy_http rewrite setenvif so speling status unique_id userdir usertrack vhost_alias" declare -x ARCH="amd64" declare -x ASFLAGS_x86="--32" declare -x CBUILD="x86_64-pc-linux-gnu" declare -x CDEFINE_amd64="__x86_64__" declare -x CDEFINE_default="__unix__" declare -x CDEFINE_x86="__i386__" declare -x CFLAGS="-march=athlon64 -O2 -pipe" declare -x CFLAGS_default="" declare -x CFLAGS_x86="-m32 -L/emul/linux/x86/lib -L/emul/linux/x86/usr/lib" declare -x CHOST="x86_64-pc-linux-gnu" declare -x CHOST_amd64="x86_64-pc-linux-gnu" declare -x CHOST_default="x86_64-pc-linux-gnu" declare -x CHOST_x86="i686-pc-linux-gnu" declare -x CLASSPATH="." declare -x CTARGET_default="x86_64-pc-linux-gnu" declare -x CVS_RSH="ssh" declare -x CXXFLAGS="-march=athlon64 -O2 -pipe" declare -x DEBUGBUILD="1" declare -x DEFAULT_ABI="amd64" declare -x DESTTREE="/usr" declare -x DIROPTIONS="-m0755" declare -x ELIBC="glibc" declare -x EXEOPTIONS="-m0755" declare -x FEATURES="distlocks fixpackages metadata-transfer parallel-fetch sandbox sfperms strict unmerge-orphans userfetch" declare -x GCC_SPECS="" declare -x GDK_USE_XFT="1" declare -x GENERATION="2" declare -x HUSHLOGIN="FALSE" declare -x INHERITED="nvidia-driver toolchain-funcs portability flag-o-matic versionator multilib linux-info linux-mod eutils" declare -x INPUT_DEVICES="keyboard mouse evdev" declare -x INSDESTTREE="" declare -x INSOPTIONS="-m0644" declare -x IUSE=" acpi custom-cflags gtk multilib kernel_linux kernel_linux" declare -x JAVAC="/etc/java-config-2/current-system-vm/bin/javac" declare -x JAVA_HOME="/etc/java-config-2/current-system-vm" declare -x JDK_HOME="/etc/java-config-2/current-system-vm" declare -x KERNEL="linux" declare -x KERNEL_ABI="amd64" declare -x KV="2.6.25" declare -x LANG="en_US.UTF-8" declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" declare -x LC_ADDRESS="en_US.UTF-8" declare -x LC_COLLATE="en_US.UTF-8" declare -x LC_CTYPE="zh_CN.UTF-8" declare -x LC_IDENTIFICATION="en_US.UTF-8" declare -x LC_MEASUREMENT="en_US.UTF-8" declare -x LC_MESSAGES="en_US.UTF-8" declare -x LC_MONETARY="en_US.UTF-8" declare -x LC_NAME="en_US.UTF-8" declare -x LC_NUMERIC="en_US.UTF-8" declare -x LC_PAPER="en_US.UTF-8" declare -x LC_TELEPHONE="en_US.UTF-8" declare -x LC_TIME="en_US.UTF-8" declare -x LDFLAGS_default="" declare -x LDFLAGS_x86="-m elf_i386 -L/emul/linux/x86/lib -L/emul/linux/x86/usr/lib" declare -x LIBDIR_amd64="lib64" declare -x LIBDIR_default="lib" declare -x LIBDIR_x86="lib32" declare -x LIBOPTIONS="-m0644" declare -x MAKEOPTS="-j2" declare -x MULTILIB_ABIS="amd64 x86" declare -x MULTILIB_STRICT_DENY="64-bit.*shared object" declare -x MULTILIB_STRICT_DIRS="/lib /usr/lib /usr/kde/*/lib /usr/qt/*/lib /usr/X11R6/lib" declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage)" declare -x OPENGL_PROFILE="nvidia" declare -x PYTHONPATH="/usr/lib64/portage/pym" declare -x RESTRICT="strip" declare -x S="/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/work/NVIDIA-Linux-x86_64-169.09-pkg2" declare -x SANDBOX_DENY="/etc/ld.so.preload" declare -x SANDBOX_PREDICT=":/dev/console:/dev/random:/proc/self/maps:/usr/lib64/portage/pym:/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/cache/edb/dep:/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/x11-drivers/nvidia-drivers-169.09-r1/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/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/lib/cf:/usr/lib/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/homedir/.bash_history:/var/tmp/portage/x11-drivers/nvidia-drivers-169.09-r1/homedir/.gconfd/lock:" declare -x SLOT="0" declare -x STAGE1_USE="nptl nptlonly unicode" declare -x SYMLINK_LIB="yes" declare -x USE="acpi amd64 elibc_glibc gtk kernel_linux userland_GNU" declare -x USERLAND="GNU" declare -x VIDEO_CARDS="nvidia nv" declare -x VMHANDLE="blackdown-jdk-1.4.2" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_="" declare -x _POSIX2_VERSION="199209"