Created
November 19, 2012 12:29
-
-
Save anonymous/4110388 to your computer and use it in GitHub Desktop.
stdin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| declare -x ABI="amd64" | |
| declare -a ALL_AUTOTOOLS_MACROS='([0]="AC_PROG_LIBTOOL" [1]="AM_PROG_LIBTOOL" [2]="LT_INIT" [3]="AC_CONFIG_HEADERS" [4]="AC_CONFIG_SUBDIRS" [5]="AC_CONFIG_AUX_DIR" [6]="AC_CONFIG_MACRO_DIR" [7]="AM_INIT_AUTOMAKE" [8]="AM_GLIB_GNU_GETTEXT" [9]="AM_GNU_GETTEXT_VERSION" [10]="AC_PROG_INTLTOOL" [11]="IT_PROG_INTLTOOL" [12]="GTK_DOC_CHECK" [13]="GNOME_DOC_INIT")' | |
| declare -x ALSA_CARDS="" | |
| declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" | |
| declare -x ANT_HOME="/usr/share/ant" | |
| declare -x APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" | |
| declare -x ARCH="amd64" | |
| declare -- AT_M4DIR="" | |
| declare -- AT_SYS_M4DIR="" | |
| declare -- AUTOTOOLS_AUTO_DEPEND="yes" | |
| declare -- AUTOTOOLS_DEPEND="|| ( >=sys-devel/automake-1.11.1:1.11 >=sys-devel/automake-1.12:1.12 ) >=sys-devel/autoconf-2.68 sys-devel/libtool" | |
| declare -x BOOTSTRAP_USE="cxx unicode multilib" | |
| declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump" | |
| declare -x CAMERAS="ptp2" | |
| declare -x CASROOT="/usr/lib64/opencascade-6.5/ros/lin" | |
| declare -x CBUILD="x86_64-pc-linux-gnu" | |
| declare -x CFLAGS="-O2 -march=corei7 -mfpmath=sse -mmmx -msse -msse2 -msse3 -mssse3 -msse4 -msse4.2 -msse4.1 -maes -pipe " | |
| declare -x CFLAGS_amd64="-m64" | |
| declare -x CFLAGS_default | |
| declare -x CFLAGS_x32="-mx32" | |
| declare -x CFLAGS_x86="-m32" | |
| 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_x32="x86_64-pc-linux-gnux32" | |
| declare -x CHOST_x86="i686-pc-linux-gnu" | |
| declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" | |
| declare -x CROSSCOMPILE_OPTS="" | |
| declare -x CSF_EXCEPTION_PROMPT="1" | |
| declare -x CSF_GraphicShr="/usr/lib64/opencascade-6.5/ros/lin/lib64/libTKOpenGl.so" | |
| declare -x CSF_IGESDefaults="/usr/lib64/opencascade-6.5/ros/lin/src/XSTEPResource" | |
| declare -x CSF_LANGUAGE="us" | |
| declare -x CSF_MDTVFontDirectory="/usr/lib64/opencascade-6.5/ros/lin/src/FontMFT" | |
| declare -x CSF_MDTVTexturesDirectory="/usr/lib64/opencascade-6.5/ros/lin/src/Textures" | |
| declare -x CSF_MIGRATION_TYPES="/usr/lib64/opencascade-6.5/ros/lin/src/StdResource/MigrationSheet.txt" | |
| declare -x CSF_PluginDefaults="/usr/lib64/opencascade-6.5/ros/lin/src/StdResource" | |
| declare -x CSF_SHMessage="/usr/lib64/opencascade-6.5/ros/lin/src/SHMessage" | |
| declare -x CSF_STEPDefaults="/usr/lib64/opencascade-6.5/ros/lin/src/XSTEPResource" | |
| declare -x CSF_StandardDefaults="/usr/lib64/opencascade-6.5/ros/lin/src/StdResource" | |
| declare -x CSF_StandardLiteDefaults="/usr/lib64/opencascade-6.5/ros/lin/src/StdResource" | |
| declare -x CSF_UnitsDefinition="/usr/lib64/opencascade-6.5/ros/lin/src/UnitsAPI/Units.dat" | |
| declare -x CSF_UnitsLexicon="/usr/lib64/opencascade-6.5/ros/lin/src/UnitsAPI/Lexi_Expr.dat" | |
| declare -x CSF_XCAFDefaults="/usr/lib64/opencascade-6.5/ros/lin/src/StdResource" | |
| declare -x CSF_XSMessage="/usr/lib64/opencascade-6.5/ros/lin/src/XSMessage" | |
| declare -x CSF_XmlOcafResource="/usr/lib64/opencascade-6.5/ros/lin/src/XmlOcafResource" | |
| declare -x CTARGET_default="x86_64-pc-linux-gnu" | |
| declare -x CXXFLAGS="-O2 -march=corei7 -mfpmath=sse -mmmx -msse -msse2 -msse3 -mssse3 -msse4 -msse4.2 -msse4.1 -maes -pipe " | |
| declare -x DCCC_PATH="/usr/lib64/distcc/bin" | |
| declare -x DEFAULT_ABI="amd64" | |
| declare -x DEFINED_PHASES=" configure install postinst prepare setup" | |
| declare DEPEND=">=dev-libs/dbus-glib-0.61 | |
| >=dev-libs/glib-2.14 | |
| >=dev-libs/expat-1.95.8 | |
| =virtual/libusb-0* | |
| >=sys-apps/pciutils-2.2.7-r1 | |
| sys-apps/usbutils | |
| virtual/eject | |
| amd64? ( >=sys-apps/dmidecode-2.7 ) | |
| dell? ( >=sys-libs/libsmbios-0.13.4 ) | |
| disk-partition? ( >=sys-block/parted-1.8.0 ) | |
| ia64? ( >=sys-apps/dmidecode-2.7 ) | |
| kernel_linux? ( | |
| >=sys-fs/udev-125 | |
| >=sys-apps/util-linux-2.16 | |
| >=sys-kernel/linux-headers-2.6.22 | |
| crypt? ( >=sys-fs/cryptsetup-1.0.5 ) | |
| ) | |
| kernel_FreeBSD? ( >=dev-libs/libvolume_id-0.77 ) | |
| x86? ( >=sys-apps/dmidecode-2.7 ) | |
| selinux? ( sys-libs/libselinux ) | |
| dev-util/pkgconfig | |
| >=dev-util/gperf-3.0.3 | |
| >=dev-util/intltool-0.35 | |
| doc? ( | |
| app-text/xmlto | |
| dev-libs/libxml2 | |
| dev-util/gtk-doc | |
| app-text/docbook-sgml-utils | |
| app-text/docbook-xml-dtd:4.1.2 | |
| ) || ( >=sys-devel/automake-1.11.1:1.11 >=sys-devel/automake-1.12:1.12 ) >=sys-devel/autoconf-2.68 sys-devel/libtool" | |
| declare DESCRIPTION="Hardware Abstraction Layer" | |
| declare -x DESTTREE="/usr" | |
| declare -x DIROPTIONS="-m0755" | |
| declare -x EAPI="2" | |
| declare -- ECLASSDIR_LOCAL="/var/portage/eclass" | |
| declare -x ELIBC="glibc" | |
| declare -- EPATCH_COMMON_OPTS="-g0 -E --no-backup-if-mismatch" | |
| declare -- EPATCH_EXCLUDE="" | |
| declare -- EPATCH_FORCE="no" | |
| declare -- EPATCH_MULTI_MSG="Applying various patches (bugfixes/updates) ..." | |
| declare -- EPATCH_OPTS="" | |
| declare -- EPATCH_SINGLE_MSG="" | |
| declare -- EPATCH_SOURCE="/var/tmp/portage/sys-apps/hal-0.5.14-r4/work/patch" | |
| declare -- EPATCH_SUFFIX="patch.bz2" | |
| declare -x EXEOPTIONS="-m0755" | |
| declare -x FCFLAGS="-O2 -pipe" | |
| declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\"" | |
| declare -x FFLAGS="-O2 -pipe" | |
| declare -x FLTK_DOCDIR="/usr/share/doc/fltk-1.3.0-r1/html" | |
| declare -x GCC_SPECS="" | |
| declare -x GDK_USE_XFT="1" | |
| declare -x GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf superstar2 timing tsip tripmate tnt ubx" | |
| declare -x GRUB_PLATFORMS="" | |
| declare -x GSETTINGS_BACKEND="gconf" | |
| declare -- HALDAEMON_GROUPS_FREEBSD="haldaemon,plugdev,operator" | |
| declare -- HALDAEMON_GROUPS_LINUX="haldaemon,plugdev,disk,cdrom,cdrw,floppy,usb" | |
| declare -x HG="/usr/bin/hg" | |
| declare HOMEPAGE="http://www.freedesktop.org/wiki/Software/hal" | |
| declare -x INHERITED=" multilib toolchain-funcs user eutils versionator linux-info libtool multiprocessing autotools flag-o-matic" | |
| declare -x INPUT_DEVICES="evdev mouse keyboard" | |
| declare -x INSDESTTREE="" | |
| declare -x INSOPTIONS="-m0644" | |
| declare -x ITCL_LIBRARY="/usr/lib64/itcl3.4" | |
| declare -x ITK_LIBRARY="/usr/lib64/itk3.4" | |
| declare IUSE="X acpi apm crypt debug dell disk-partition doc laptop selinux kernel_linux kernel_FreeBSD " | |
| declare -x IUSE_IMPLICIT="prefix" | |
| declare -x JAVACC_HOME="/usr/share/javacc/" | |
| declare -x KERNEL="linux" | |
| declare -x KERNEL_ABI="amd64" | |
| declare -- KERNEL_DIR="/usr/src/linux" | |
| declare -- KERNEL_IUSE="kernel_linux kernel_FreeBSD" | |
| declare -- KERNEL_MAKEFILE="/usr/src/linux/Makefile" | |
| declare -x KEYWORDS="alpha amd64 arm hppa ia64 ~mips ppc ppc64 sh sparc x86 ~x86-fbsd" | |
| declare -x KV="3.6.1-gentoo-goblin-0.3.1" | |
| declare -- KV_DIR="/usr/src/linux" | |
| declare -- KV_EXTRA="-gentoo" | |
| declare -- KV_FULL="3.6.1-gentoo-goblin-0.3.1" | |
| declare -- KV_LOCAL="-goblin-0.3.1" | |
| declare -- KV_MAJOR="3" | |
| declare -- KV_MINOR="6" | |
| declare -- KV_OUT_DIR="/usr/src/linux" | |
| declare -- KV_PATCH="1" | |
| declare -x LANG="ru_RU.UTF-8" | |
| declare -x LCD_DEVICES="" | |
| declare -x LDFLAGS="-Wl,-O1 -Wl,--as-needed" | |
| declare -x LDFLAGS_amd64="-m elf_x86_64" | |
| declare -x LDFLAGS_default | |
| declare -x LDFLAGS_x32="-m elf32_x86_64" | |
| declare -x LDFLAGS_x86="-m elf_i386" | |
| declare -x LIBDIR_amd64="lib64" | |
| declare -x LIBDIR_amd64_fbsd="lib64" | |
| declare -x LIBDIR_default="lib" | |
| declare -x LIBDIR_n32="lib32" | |
| declare -x LIBDIR_n64="lib64" | |
| declare -x LIBDIR_o32="lib" | |
| declare -x LIBDIR_ppc="lib32" | |
| declare -x LIBDIR_ppc64="lib64" | |
| declare -x LIBDIR_s390="lib32" | |
| declare -x LIBDIR_s390x="lib64" | |
| declare -x LIBDIR_sparc32="lib32" | |
| declare -x LIBDIR_sparc64="lib64" | |
| declare -x LIBDIR_x32="libx32" | |
| declare -x LIBDIR_x86="lib32" | |
| declare -x LIBDIR_x86_fbsd="lib32" | |
| declare -x LIBOPTIONS="-m0644" | |
| declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" | |
| declare -x LICENSE="|| ( GPL-2 AFL-2.0 )" | |
| declare -x LINGUAS="ru ru_RU" | |
| declare -x LINUX_CONFIG_EXISTS_DONE="1" | |
| declare -x LIRC_DEVICES="all" | |
| declare -x MAIL="/var/mail/root" | |
| declare -x MAKEOPTS="-j5" | |
| declare -x MMGT_CLEAR="1" | |
| declare -x MULTILIB_ABIS="amd64 x86" | |
| declare -x MULTILIB_STRICT_DENY="64-bit.*shared object" | |
| declare -x MULTILIB_STRICT_DIRS="/lib32 /lib /usr/lib32 /usr/lib /usr/kde/*/lib32 /usr/kde/*/lib /usr/qt/*/lib32 /usr/qt/*/lib /usr/X11R6/lib32 /usr/X11R6/lib" | |
| declare -x MULTILIB_STRICT_EXEMPT="(perl5|gcc|gcc-lib|binutils|eclipse-3|debug|portage|udev)" | |
| declare -- MY_P="hal-0.5.14" | |
| declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml" | |
| declare -x OPENCL_PROFILE="nvidia" | |
| declare -x OPENGL_PROFILE="xorg-x11" | |
| declare -- OUTPUT_DIR="/lib/modules/3.6.1-gentoo/build" | |
| declare -- PATCHNAME="hal-0.5.14-gentoo-patches-5" | |
| declare -- PATCH_VERSION="5" | |
| declare -x PATH="/usr/lib64/portage/bin/ebuild-helpers:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.6.3:/usr/i486-pc-linux-gnu/gcc-bin/4.3.2:/usr/i686-pc-linux-gnu/gcc-bin/4.3.2:/opt/intel/cce/10.0.026/bin:/usr/kde/3.5/sbin:/usr/kde/3.5/bin:/usr/qt/3/bin" | |
| declare PDEPEND=">=app-misc/hal-info-20081219 | |
| !gnome-extra/hal-device-manager | |
| laptop? ( >=sys-power/pm-utils-0.99.3 ) " | |
| declare -x PHP_TARGETS="" | |
| declare -a PORTAGE_DOCOMPRESS='([0]="/usr/share/doc" [1]="/usr/share/info" [2]="/usr/share/man")' | |
| declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/hal-0.5.14-r4/html")' | |
| declare -x PRELINK_PATH_MASK="/usr/lib64/libfreebl3.so:/usr/lib64/libnssdbm3.so:/usr/lib64/libsoftokn3.so" | |
| declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND" | |
| declare -x PROPERTIES="" | |
| declare -x PROVIDE="" | |
| declare -x PYTHONDONTWRITEBYTECODE="1" | |
| declare -x PYTHON_TARGETS="" | |
| declare -x QEMU_SOFTMMU_TARGETS="i386 x86_64" | |
| declare -x QEMU_USER_TARGETS="i386 x86_64" | |
| declare -x QMAKESPEC="linux-g++" | |
| declare -x QTDIR="/usr/qt/3" | |
| declare -x QT_GRAPHICSSYSTEM="raster" | |
| declare -x QT_PLUGIN_PATH="/usr/lib64/kde4/plugins" | |
| declare -x RDEPEND=">=dev-libs/dbus-glib-0.61 | |
| >=dev-libs/glib-2.14 | |
| >=dev-libs/expat-1.95.8 | |
| =virtual/libusb-0* | |
| >=sys-apps/pciutils-2.2.7-r1 | |
| sys-apps/usbutils | |
| virtual/eject | |
| amd64? ( >=sys-apps/dmidecode-2.7 ) | |
| dell? ( >=sys-libs/libsmbios-0.13.4 ) | |
| disk-partition? ( >=sys-block/parted-1.8.0 ) | |
| ia64? ( >=sys-apps/dmidecode-2.7 ) | |
| kernel_linux? ( | |
| >=sys-fs/udev-125 | |
| >=sys-apps/util-linux-2.16 | |
| >=sys-kernel/linux-headers-2.6.22 | |
| crypt? ( >=sys-fs/cryptsetup-1.0.5 ) | |
| ) | |
| kernel_FreeBSD? ( >=dev-libs/libvolume_id-0.77 ) | |
| x86? ( >=sys-apps/dmidecode-2.7 ) | |
| selinux? ( sys-libs/libselinux ) " | |
| declare REPOSITORY | |
| declare REQUIRED_USE="" | |
| declare -x RESTRICT="" | |
| declare -x RESUMECOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\"" | |
| declare -x RUBYOPT="-rauto_gem" | |
| declare -x RUBY_TARGETS="ruby18 ruby19" | |
| declare -x S="/var/tmp/portage/sys-apps/hal-0.5.14-r4/work/hal-0.5.14" | |
| declare -x SANDBOX_DEBUG="0" | |
| declare -x SANDBOX_DENY="" | |
| declare -x SANDBOX_PID="18699" | |
| declare -x SANDBOX_PREDICT="/var/tmp/portage/sys-apps/hal-0.5.14-r4/homedir:/dev/crypto:/var/cache/fontconfig" | |
| declare -x SANDBOX_READ="/:/var/tmp" | |
| declare -x SANDBOX_VERBOSE="1" | |
| declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/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/tmp:/var/tmp/:/var/tmp/portage/sys-apps/hal-0.5.14-r4/homedir/.bash_history" | |
| declare -x SBCL_HOME="/usr/lib64/sbcl" | |
| declare -x SBCL_SOURCE_ROOT="/usr/lib64/sbcl/src" | |
| declare -x SLOT="0" | |
| declare SRC_URI="mirror://kde-sunset/hal-0.5.14.tar.bz2 | |
| mirror://kde-sunset/hal-0.5.14-gentoo-patches-5.tar.bz2" | |
| declare -x SUDO_COMMAND="/usr/bin/emerge -1 hal" | |
| declare -x SUDO_GID="100" | |
| declare -x SUDO_UID="1000" | |
| declare -x SUDO_USER="alexander" | |
| declare -x SYMLINK_LIB="yes" | |
| declare -x TCLHOME="/usr/bin" | |
| declare -x TCLLIBPATH="/usr/lib64" | |
| declare -x TCL_LIBRARY="/usr/lib64/tcl8.5" | |
| declare -x TIX_LIBRARY="/usr/lib64/tix8.4" | |
| declare -x TK_LIBRARY="/usr/lib64/tk8.5" | |
| declare -x USE="X acpi amd64 crypt elibc_glibc kernel_linux multilib userland_GNU" | |
| declare -x USERLAND="GNU" | |
| declare -x USERNAME="root" | |
| declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND" | |
| declare -x USE_EXPAND_UNPREFIXED="ARCH" | |
| declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt" | |
| declare -x USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin FreeBSD glibc HPUX Interix mintlib NetBSD OpenBSD SunOS uclibc Winnt" | |
| declare -x USE_EXPAND_VALUES_KERNEL="AIX Cygwin Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt" | |
| declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU" | |
| declare -x VBOX_APP_HOME="/opt/VirtualBox" | |
| declare -x VIDEO_CARDS="" | |
| declare -x VISUAL="/usr/bin/vi" | |
| declare -x WANT_AUTOCONF="latest" | |
| declare -x WANT_AUTOMAKE="latest" | |
| declare -x WANT_LIBTOOL="latest" | |
| declare -x XDG_CONFIG_DIRS="/etc/xdg" | |
| declare -x XDG_DATA_DIRS="/usr/local/share:/usr/kde/3.5/share:/usr/share" | |
| declare -x XERCESC_NLS_HOME="/usr/share/xerces-c/msg" | |
| declare -x XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account" | |
| declare -x _E_DOCDESTTREE_="" | |
| declare -x _E_EXEDESTTREE_="" | |
| declare -a _LATEST_AUTOMAKE='([0]="1.11.1:1.11" [1]="1.12:1.12")' | |
| declare -x _LINUX_CONFIG_EXISTS_DONE="1" | |
| declare -- ___ECLASS_ONCE_AUTOTOOLS="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_EUTILS="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_FLAG_O_MATIC="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_LIBTOOL="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_MULTILIB="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_MULTIPROCESSING="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_TOOLCHAIN_FUNCS="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_USER="recur -_+^+_- spank" | |
| declare -- ___ECLASS_ONCE_VERSIONATOR="recur -_+^+_- spank" | |
| declare -- _libtool_atom="sys-devel/libtool" | |
| declare -- get_version_warning_done="" | |
| declare -- phase_func | |
| ELT_libtool_version () | |
| { | |
| ( unset VERSION; | |
| eval $(grep -e '^[[:space:]]*VERSION=' "$1"); | |
| echo "${VERSION:-0}" ) | |
| } | |
| ELT_try_and_apply_patch () | |
| { | |
| local ret=0; | |
| local file=$1; | |
| local patch=$2; | |
| local src=$3; | |
| local disp="${src} patch"; | |
| local log="${T}/elibtool.log"; | |
| if [[ -z ${__ELT_NOTED_TMP} ]]; then | |
| __ELT_NOTED_TMP=true; | |
| printf 'temp patch: %s\n' "${patch}" > "${log}"; | |
| fi; | |
| printf '\nTrying %s\n' "${disp}" >> "${log}"; | |
| if patch -p0 --dry-run "${file}" "${patch}" >> "${log}" 2>&1; then | |
| einfo " Applying ${disp} ..."; | |
| patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >> "${log}" 2>&1; | |
| ret=$?; | |
| export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${src}"; | |
| else | |
| ret=1; | |
| fi; | |
| return "${ret}" | |
| } | |
| ELT_walk_patches () | |
| { | |
| local patch tmp; | |
| local ret=1; | |
| local file=$1; | |
| local patch_set=$2; | |
| local patch_dir="$(elt_patch_dir)/${patch_set}"; | |
| local rem_int_dep=$3; | |
| [[ -z ${patch_set} ]] && return 1; | |
| [[ ! -d ${patch_dir} ]] && return 1; | |
| local sed_args=(-e "s:@GENTOO_LIBDIR@:$(get_libdir):g"); | |
| if [[ -n ${rem_int_dep} ]]; then | |
| sed_args+=(-e "s|@REM_INT_DEP@|${rem_int_dep}|g"); | |
| fi; | |
| pushd "$(elt_patch_dir)" > /dev/null || die; | |
| for patch in $(find "${patch_set}" -maxdepth 1 -type f | LC_ALL=C sort -r); | |
| do | |
| tmp="${T}/libtool-elt.patch"; | |
| sed "${sed_args[@]}" "${patch}" > "${tmp}" || die; | |
| if ELT_try_and_apply_patch "${file}" "${tmp}" "${patch}"; then | |
| ret=0; | |
| break; | |
| fi; | |
| done; | |
| popd > /dev/null; | |
| return ${ret} | |
| } | |
| VER_major () | |
| { | |
| [[ -z $1 ]] && return 1; | |
| local VER=$@; | |
| echo "${VER%%[^[:digit:]]*}" | |
| } | |
| VER_micro () | |
| { | |
| [[ -z $1 ]] && return 1; | |
| local VER=$@; | |
| VER=${VER#*.*.}; | |
| echo "${VER%%[^[:digit:]]*}" | |
| } | |
| VER_minor () | |
| { | |
| [[ -z $1 ]] && return 1; | |
| local VER=$@; | |
| VER=${VER#*.}; | |
| echo "${VER%%[^[:digit:]]*}" | |
| } | |
| VER_to_int () | |
| { | |
| [[ -z $1 ]] && return 1; | |
| local VER_MAJOR=$(VER_major "$1"); | |
| local VER_MINOR=$(VER_minor "$1"); | |
| local VER_MICRO=$(VER_micro "$1"); | |
| local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO )); | |
| if [[ ${VER_int} -ge 65536 ]]; then | |
| echo "${VER_int}"; | |
| return 0; | |
| fi; | |
| echo 1; | |
| return 1 | |
| } | |
| _assert_pkg_ebuild_phase () | |
| { | |
| case ${EBUILD_PHASE} in | |
| setup | preinst | postinst) | |
| ;; | |
| *) | |
| eerror "'$1()' called from '${EBUILD_PHASE}' phase which is not OK:"; | |
| eerror "You may only call from pkg_{setup,preinst,postinst} functions."; | |
| eerror "Package fails at QA and at life. Please file a bug."; | |
| die "Bad package! $1 is only for use in some pkg_* functions!" | |
| ;; | |
| esac | |
| } | |
| _at_uses_autoheader () | |
| { | |
| _at_uses_pkg AC_CONFIG_HEADERS | |
| } | |
| _at_uses_automake () | |
| { | |
| _at_uses_pkg AM_INIT_AUTOMAKE | |
| } | |
| _at_uses_gettext () | |
| { | |
| _at_uses_pkg AM_GNU_GETTEXT_VERSION | |
| } | |
| _at_uses_glibgettext () | |
| { | |
| _at_uses_pkg AM_GLIB_GNU_GETTEXT | |
| } | |
| _at_uses_gnomedoc () | |
| { | |
| _at_uses_pkg GNOME_DOC_INIT | |
| } | |
| _at_uses_gtkdoc () | |
| { | |
| _at_uses_pkg GTK_DOC_CHECK | |
| } | |
| _at_uses_intltool () | |
| { | |
| _at_uses_pkg {AC,IT}_PROG_INTLTOOL | |
| } | |
| _at_uses_libtool () | |
| { | |
| _at_uses_pkg A{C,M}_PROG_LIBTOOL LT_INIT | |
| } | |
| _at_uses_pkg () | |
| { | |
| if [[ -n $(autotools_check_macro "$@") ]]; then | |
| return 0; | |
| else | |
| local macro args=(); | |
| for macro in "$@"; | |
| do | |
| args+=(-e "^[[:space:]]*${macro}\>"); | |
| done; | |
| egrep -q "${args[@]}" configure.??; | |
| fi | |
| } | |
| _autotools_m4dir_include () | |
| { | |
| local x include_opts; | |
| for x in "$@"; | |
| do | |
| case ${x} in | |
| -I) | |
| ;; | |
| *) | |
| [[ ! -d ${x} ]] && ewarn "autotools.eclass: '${x}' does not exist"; | |
| include_opts+=" -I ${x}" | |
| ;; | |
| esac; | |
| done; | |
| echo ${include_opts} | |
| } | |
| _elibtoolize () | |
| { | |
| local LIBTOOLIZE=${LIBTOOLIZE:-$(type -P glibtoolize > /dev/null && echo glibtoolize || echo libtoolize)}; | |
| [[ -f GNUmakefile.am || -f Makefile.am ]] && set -- "$@" --automake; | |
| if [[ $1 == "--install" ]]; then | |
| ${LIBTOOLIZE} -n --install &>/dev/null || shift; | |
| fi; | |
| autotools_run_tool ${LIBTOOLIZE} "$@" ${opts} | |
| } | |
| _filter-hardened () | |
| { | |
| local f; | |
| for f in "$@"; | |
| do | |
| case "${f}" in | |
| -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie) | |
| gcc-specs-pie || continue; | |
| is-flagq -nopie || append-flags -nopie | |
| ;; | |
| -fstack-protector) | |
| gcc-specs-ssp || continue; | |
| is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector) | |
| ;; | |
| -fstack-protector-all) | |
| gcc-specs-ssp-to-all || continue; | |
| is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all) | |
| ;; | |
| -fno-strict-overflow) | |
| gcc-specs-nostrict || continue; | |
| is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow) | |
| ;; | |
| esac; | |
| done | |
| } | |
| _filter-var () | |
| { | |
| local f x var=$1 new=(); | |
| shift; | |
| for f in ${!var}; | |
| do | |
| for x in "$@"; | |
| do | |
| [[ ${f} == ${x} ]] && continue 2; | |
| done; | |
| 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 ]] | |
| } | |
| _gcc_fullversion () | |
| { | |
| local ver="$1"; | |
| shift; | |
| set -- `$(tc-getCPP "$@") -E -P - <<<"__GNUC__ __GNUC_MINOR__ __GNUC_PATCHLEVEL__"`; | |
| eval echo "$ver" | |
| } | |
| _iconins () | |
| { | |
| ( local funcname=$1; | |
| shift; | |
| local size dir; | |
| local context=apps; | |
| local theme=hicolor; | |
| while [[ $# -gt 0 ]]; do | |
| case $1 in | |
| -s | --size) | |
| if [[ ${2%%x*}x${2%%x*} == "$2" ]]; then | |
| size=${2%%x*}; | |
| else | |
| size=${2}; | |
| fi; | |
| case ${size} in | |
| 16 | 22 | 24 | 32 | 36 | 48 | 64 | 72 | 96 | 128 | 192 | 256) | |
| size=${size}x${size} | |
| ;; | |
| scalable) | |
| ;; | |
| *) | |
| eerror "${size} is an unsupported icon size!"; | |
| exit 1 | |
| ;; | |
| esac; | |
| shift 2 | |
| ;; | |
| -t | --theme) | |
| theme=${2}; | |
| shift 2 | |
| ;; | |
| -c | --context) | |
| context=${2}; | |
| shift 2 | |
| ;; | |
| *) | |
| if [[ -z ${size} ]]; then | |
| insinto /usr/share/pixmaps; | |
| else | |
| insinto /usr/share/icons/${theme}/${size}/${context}; | |
| fi; | |
| if [[ ${funcname} == doicon ]]; then | |
| if [[ -f $1 ]]; then | |
| doins "${1}"; | |
| else | |
| if [[ -d $1 ]]; then | |
| shopt -s nullglob; | |
| doins "${1}"/*.{png,svg}; | |
| shopt -u nullglob; | |
| else | |
| eerror "${1} is not a valid file/directory!"; | |
| exit 1; | |
| fi; | |
| fi; | |
| else | |
| break; | |
| fi; | |
| shift 1 | |
| ;; | |
| esac; | |
| done; | |
| if [[ ${funcname} == newicon ]]; then | |
| newins "$@"; | |
| fi ) || die | |
| } | |
| _is_flagq () | |
| { | |
| local x; | |
| for x in ${!1}; | |
| do | |
| [[ ${x} == $2 ]] && return 0; | |
| done; | |
| return 1 | |
| } | |
| _multijob_fork () | |
| { | |
| [[ $# -eq 1 ]] || die "incorrect number of arguments"; | |
| local ret=0; | |
| [[ $1 == "post" ]] && : $(( ++mj_num_jobs )); | |
| if [[ ${mj_num_jobs} -ge ${mj_max_jobs} ]]; then | |
| multijob_finish_one; | |
| ret=$?; | |
| fi; | |
| [[ $1 == "pre" ]] && : $(( ++mj_num_jobs )); | |
| return ${ret} | |
| } | |
| _tc-getPROG () | |
| { | |
| local tuple=$1; | |
| local v var vars=$2; | |
| local prog=$3; | |
| var=${vars%% *}; | |
| for v in ${vars}; | |
| do | |
| if [[ -n ${!v} ]]; then | |
| export ${var}="${!v}"; | |
| echo "${!v}"; | |
| return 0; | |
| fi; | |
| done; | |
| local search=; | |
| [[ -n $4 ]] && search=$(type -p "$4-${prog}"); | |
| [[ -z ${search} && -n ${!tuple} ]] && search=$(type -p "${!tuple}-${prog}"); | |
| [[ -n ${search} ]] && prog=${search##*/}; | |
| export ${var}=${prog}; | |
| echo "${!var}" | |
| } | |
| all-flag-vars () | |
| { | |
| echo {C,CPP,CXX,CCAS,F,FC,LD}FLAGS | |
| } | |
| append-cflags () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| export CFLAGS=$(test-flags-CC ${CFLAGS} "$@"); | |
| return 0 | |
| } | |
| append-cppflags () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| export CPPFLAGS="${CPPFLAGS} $*"; | |
| return 0 | |
| } | |
| append-cxxflags () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS} "$@"); | |
| return 0 | |
| } | |
| append-fflags () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| export FFLAGS=$(test-flags-F77 ${FFLAGS} "$@"); | |
| export FCFLAGS=$(test-flags-FC ${FCFLAGS} "$@"); | |
| return 0 | |
| } | |
| append-flags () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| case " $* " in | |
| *' '-[DIU]*) | |
| eqawarn 'please use append-cppflags for preprocessor flags' | |
| ;; | |
| *' '-L* | *' '-Wl,*) | |
| eqawarn 'please use append-ldflags for linker flags' | |
| ;; | |
| esac; | |
| append-cflags "$@"; | |
| append-cxxflags "$@"; | |
| append-fflags "$@"; | |
| return 0 | |
| } | |
| append-ldflags () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| local flag; | |
| for flag in "$@"; | |
| do | |
| [[ ${flag} == -l* ]] && eqawarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS"; | |
| done; | |
| export LDFLAGS="${LDFLAGS} $*"; | |
| return 0 | |
| } | |
| append-lfs-flags () | |
| { | |
| [[ $# -ne 0 ]] && die "append-lfs-flags takes no arguments"; | |
| append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE | |
| } | |
| append-libs () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| local flag; | |
| for flag in "$@"; | |
| do | |
| [[ ${flag} == -l* ]] && flag=${flag#-l}; | |
| export LIBS="${LIBS} -l${flag}"; | |
| done; | |
| return 0 | |
| } | |
| autotools_check_macro () | |
| { | |
| [[ -f configure.ac || -f configure.in ]] || return 0; | |
| local trace_file=".__autoconf_trace_data"; | |
| if [[ ! -e ${trace_file} ]] || [[ ! aclocal.m4 -ot ${trace_file} ]]; then | |
| WANT_AUTOCONF="2.5" autoconf $(autotools_m4dir_include) ${ALL_AUTOTOOLS_MACROS[@]/#/--trace=} > ${trace_file} 2> /dev/null; | |
| fi; | |
| local macro args=(); | |
| for macro in "$@"; | |
| do | |
| has ${macro} ${ALL_AUTOTOOLS_MACROS[@]} || die "internal error: add ${macro} to ALL_AUTOTOOLS_MACROS"; | |
| args+=(-e ":${macro}:"); | |
| done; | |
| grep "${args[@]}" ${trace_file} | |
| } | |
| autotools_check_macro_val () | |
| { | |
| local macro scan_out; | |
| for macro in "$@"; | |
| do | |
| autotools_check_macro "${macro}" | gawk -v macro="${macro}" '($0 !~ /^[[:space:]]*(#|dnl)/) { | |
| if (match($0, macro ":(.*)$", res)) | |
| print res[1] | |
| }' | uniq; | |
| done; | |
| return 0 | |
| } | |
| autotools_env_setup () | |
| { | |
| if [[ ${WANT_AUTOMAKE} == "latest" ]]; then | |
| local pv; | |
| for pv in ${_LATEST_AUTOMAKE[@]/#*:}; | |
| do | |
| ROOT=/ has_version "=sys-devel/automake-${pv}*" && export WANT_AUTOMAKE="${pv}"; | |
| done; | |
| [[ ${WANT_AUTOMAKE} == "latest" ]] && die "Cannot find the latest automake! Tried ${_LATEST_AUTOMAKE}"; | |
| fi; | |
| [[ ${WANT_AUTOCONF} == "latest" ]] && export WANT_AUTOCONF=2.5 | |
| } | |
| autotools_m4dir_include () | |
| { | |
| _autotools_m4dir_include ${AT_M4DIR} | |
| } | |
| autotools_m4sysdir_include () | |
| { | |
| _autotools_m4dir_include $(eval echo ${AT_SYS_M4DIR}) | |
| } | |
| autotools_run_tool () | |
| { | |
| local autofail=true m4flags=false missing_ok=false; | |
| while [[ -n $1 ]]; do | |
| case $1 in | |
| --at-no-fail) | |
| autofail=false | |
| ;; | |
| --at-m4flags) | |
| m4flags=true | |
| ;; | |
| --at-missing) | |
| missing_ok=true | |
| ;; | |
| *) | |
| break | |
| ;; | |
| esac; | |
| shift; | |
| done; | |
| if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then | |
| ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase"; | |
| fi; | |
| if ${missing_ok} && ! type -P ${1} > /dev/null; then | |
| einfo "Skipping '$*' due $1 not installed"; | |
| return 0; | |
| fi; | |
| autotools_env_setup; | |
| local STDERR_TARGET="${T}/$1.out"; | |
| if [[ -e ${STDERR_TARGET} ]]; then | |
| local i=1; | |
| while :; do | |
| STDERR_TARGET="${T}/$1-${i}.out"; | |
| [[ -e ${STDERR_TARGET} ]] || break; | |
| : $(( i++ )); | |
| done; | |
| fi; | |
| if ${m4flags}; then | |
| set -- "${1}" $(autotools_m4dir_include) "${@:2}" $(autotools_m4sysdir_include); | |
| fi; | |
| printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}"; | |
| ebegin "Running $@"; | |
| "$@" >> "${STDERR_TARGET}" 2>&1; | |
| if ! eend $? && ${autofail}; then | |
| echo; | |
| eerror "Failed Running $1 !"; | |
| eerror; | |
| eerror "Include in your bugreport the contents of:"; | |
| eerror; | |
| eerror " ${STDERR_TARGET}"; | |
| echo; | |
| die "Failed Running $1 !"; | |
| fi | |
| } | |
| built_with_use () | |
| { | |
| local hidden="no"; | |
| if [[ $1 == "--hidden" ]]; then | |
| hidden="yes"; | |
| shift; | |
| fi; | |
| local missing_action="die"; | |
| if [[ $1 == "--missing" ]]; then | |
| missing_action=$2; | |
| shift; | |
| shift; | |
| case ${missing_action} in | |
| true | false | die) | |
| ;; | |
| *) | |
| die "unknown action '${missing_action}'" | |
| ;; | |
| esac; | |
| fi; | |
| local opt=$1; | |
| [[ ${opt:0:1} = "-" ]] && shift || opt="-a"; | |
| local PKG=$(best_version $1); | |
| [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package"; | |
| shift; | |
| local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE; | |
| local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE; | |
| if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then | |
| case ${missing_action} in | |
| true) | |
| return 0 | |
| ;; | |
| false) | |
| return 1 | |
| ;; | |
| die) | |
| die "Unable to determine what USE flags $PKG was built with" | |
| ;; | |
| esac; | |
| fi; | |
| if [[ ${hidden} == "no" ]]; then | |
| local IUSE_BUILT=($(<"${IUSEFILE}")); | |
| local expand; | |
| for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]'); | |
| do | |
| if [[ $1 == ${expand}_* ]]; then | |
| expand=""; | |
| break; | |
| fi; | |
| done; | |
| if [[ -n ${expand} ]]; then | |
| if ! has $1 ${IUSE_BUILT[@]#[-+]}; then | |
| case ${missing_action} in | |
| true) | |
| return 0 | |
| ;; | |
| false) | |
| return 1 | |
| ;; | |
| die) | |
| die "$PKG does not actually support the $1 USE flag!" | |
| ;; | |
| esac; | |
| fi; | |
| fi; | |
| fi; | |
| local USE_BUILT=$(<${USEFILE}); | |
| while [[ $# -gt 0 ]]; do | |
| if [[ ${opt} = "-o" ]]; then | |
| has $1 ${USE_BUILT} && return 0; | |
| else | |
| has $1 ${USE_BUILT} || return 1; | |
| fi; | |
| shift; | |
| done; | |
| [[ ${opt} = "-a" ]] | |
| } | |
| check_acpi_proc () | |
| { | |
| local CONFIG_CHECK="~ACPI_PROCFS ~ACPI_PROC_EVENT"; | |
| local WARNING_ACPI_PROCFS="CONFIG_ACPI_PROCFS:\tis not set (required for HAL)\n"; | |
| local WARNING_ACPI_PROC_EVENT="CONFIG_ACPI_PROC_EVENT:\tis not set (required for HAL)\n"; | |
| check_extra_config | |
| } | |
| check_extra_config () | |
| { | |
| local config negate die error reworkmodulenames; | |
| local soft_errors_count=0 hard_errors_count=0 config_required=0; | |
| local old_LINUX_CONFIG_EXISTS_DONE="${_LINUX_CONFIG_EXISTS_DONE}"; | |
| linux-info_get_any_version; | |
| for config in ${CONFIG_CHECK}; | |
| do | |
| if [[ "${config:0:1}" != "~" ]]; then | |
| config_required=1; | |
| break; | |
| fi; | |
| done; | |
| if [[ ${config_required} == 0 ]]; then | |
| if ! linux_config_exists; then | |
| ewarn "Unable to check for the following kernel config options due"; | |
| ewarn "to absence of any configured kernel sources or compiled"; | |
| ewarn "config:"; | |
| for config in ${CONFIG_CHECK}; | |
| do | |
| local_error="ERROR_${config#\~}"; | |
| msg="${!local_error}"; | |
| if [[ "x${msg}" == "x" ]]; then | |
| local_error="WARNING_${config#\~}"; | |
| msg="${!local_error}"; | |
| fi; | |
| ewarn " - ${config#\~}${msg:+ - }${msg}"; | |
| done; | |
| ewarn "You're on your own to make sure they are set if needed."; | |
| export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}"; | |
| return 0; | |
| fi; | |
| else | |
| require_configured_kernel; | |
| fi; | |
| einfo "Checking for suitable kernel configuration options..."; | |
| for config in ${CONFIG_CHECK}; | |
| do | |
| die=1; | |
| error=0; | |
| negate=0; | |
| reworkmodulenames=0; | |
| if [[ ${config:0:1} == "~" ]]; then | |
| die=0; | |
| config=${config:1}; | |
| else | |
| if [[ ${config:0:1} == "@" ]]; then | |
| die=0; | |
| reworkmodulenames=1; | |
| config=${config:1}; | |
| fi; | |
| fi; | |
| if [[ ${config:0:1} == "!" ]]; then | |
| negate=1; | |
| config=${config:1}; | |
| fi; | |
| if [[ ${negate} == 1 ]]; then | |
| linux_chkconfig_present ${config} && error=2; | |
| else | |
| if [[ ${reworkmodulenames} == 1 ]]; then | |
| local temp_config="${config//*:}" i n; | |
| config="${config//:*}"; | |
| if linux_chkconfig_present ${config}; then | |
| for i in ${MODULE_NAMES}; | |
| do | |
| n="${i//${temp_config}}"; | |
| [[ -z ${n//\(*} ]] && MODULE_IGNORE="${MODULE_IGNORE} ${temp_config}"; | |
| done; | |
| error=2; | |
| fi; | |
| else | |
| linux_chkconfig_present ${config} || error=1; | |
| fi; | |
| fi; | |
| if [[ ${error} > 0 ]]; then | |
| local report_func="eerror" local_error; | |
| local_error="ERROR_${config}"; | |
| local_error="${!local_error}"; | |
| if [[ -z "${local_error}" ]]; then | |
| local_error="${config}_ERROR"; | |
| local_error="${!local_error}"; | |
| fi; | |
| if [[ ${die} == 0 && -z "${local_error}" ]]; then | |
| local_error="WARNING_${config}"; | |
| local_error="${!local_error}"; | |
| if [[ -n "${local_error}" ]]; then | |
| report_func="ewarn"; | |
| fi; | |
| fi; | |
| if [[ -z "${local_error}" ]]; then | |
| [[ ${error} == 1 ]] && local_error="is not set when it should be." || local_error="should not be set. But it is."; | |
| local_error="CONFIG_${config}:\t ${local_error}"; | |
| fi; | |
| if [[ ${die} == 0 ]]; then | |
| ${report_func} " ${local_error}"; | |
| soft_errors_count=$[soft_errors_count + 1]; | |
| else | |
| ${report_func} " ${local_error}"; | |
| hard_errors_count=$[hard_errors_count + 1]; | |
| fi; | |
| fi; | |
| done; | |
| if [[ ${hard_errors_count} > 0 ]]; then | |
| eerror "Please check to make sure these options are set correctly."; | |
| eerror "Failure to do so may cause unexpected problems."; | |
| eerror "Once you have satisfied these options, please try merging"; | |
| eerror "this package again."; | |
| export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}"; | |
| 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; | |
| export LINUX_CONFIG_EXISTS_DONE="${old_LINUX_CONFIG_EXISTS_DONE}" | |
| } | |
| check_hotplug_net () | |
| { | |
| local CONFIG_CHECK="~HOTPLUG ~NET"; | |
| local WARNING_HOTPLUG="CONFIG_HOTPLUG:\tis not set (required for HAL)\n"; | |
| local WARNING_NET="CONFIG_NET:\tis not set (required for HAL)\n"; | |
| check_extra_config | |
| } | |
| check_inotify () | |
| { | |
| local CONFIG_CHECK="~INOTIFY_USER"; | |
| local WARNING_INOTIFY_USER="CONFIG_INOTIFY_USER:\tis not set (required for HAL)\n"; | |
| check_extra_config | |
| } | |
| check_kernel_built () | |
| { | |
| require_configured_kernel; | |
| get_version; | |
| local versionh_path; | |
| if kernel_is -ge 3 7; then | |
| versionh_path="include/generated/uapi/linux/version.h"; | |
| else | |
| versionh_path="include/linux/version.h"; | |
| fi; | |
| if [ ! -f "${KV_OUT_DIR}/${versionh_path}" ]; 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 () | |
| { | |
| die "you no longer need this as portage supports ACCEPT_LICENSE itself" | |
| } | |
| 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_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"; | |
| linux_chkconfig_builtin CONFIG_ZLIB_INFLATE; | |
| eend $?; | |
| [ "$?" != 0 ] && die; | |
| ebegin "checking ZLIB_DEFLATE"; | |
| linux_chkconfig_builtin CONFIG_ZLIB_DEFLATE; | |
| 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" | |
| } | |
| config_rpath_update () | |
| { | |
| local dst src=$(type -P gettext | sed 's:bin/gettext:share/gettext/config.rpath:'); | |
| [[ $# -eq 0 ]] && set -- $(find -name config.rpath); | |
| [[ $# -eq 0 ]] && return 0; | |
| einfo "Updating all config.rpath files"; | |
| for dst in "$@"; | |
| do | |
| einfo " ${dst}"; | |
| cp "${src}" "${dst}" || die; | |
| done | |
| } | |
| darwintoolize () | |
| { | |
| die "Use elibtoolize" | |
| } | |
| delete_all_version_separators () | |
| { | |
| replace_all_version_separators "" "${1}" | |
| } | |
| delete_version_separator () | |
| { | |
| replace_version_separator "${1}" "" "${2}" | |
| } | |
| doicon () | |
| { | |
| _iconins ${FUNCNAME} "$@" | |
| } | |
| domenu () | |
| { | |
| ( local i j ret=0; | |
| insinto /usr/share/applications; | |
| for i in "$@"; | |
| do | |
| if [[ -f ${i} ]]; then | |
| doins "${i}"; | |
| ((ret+=$?)); | |
| else | |
| if [[ -d ${i} ]]; then | |
| for j in "${i}"/*.desktop; | |
| do | |
| doins "${j}"; | |
| ((ret+=$?)); | |
| done; | |
| else | |
| ((++ret)); | |
| fi; | |
| fi; | |
| done; | |
| exit ${ret} ) | |
| } | |
| eaclocal () | |
| { | |
| [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && autotools_run_tool --at-m4flags aclocal "$@" $(eaclocal_amflags) | |
| } | |
| eaclocal_amflags () | |
| { | |
| local aclocal_opts amflags_file; | |
| for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in; | |
| do | |
| [[ -e ${amflags_file} ]] || continue; | |
| autotools_env_setup; | |
| aclocal_opts=$(sed -n "/^ACLOCAL_AMFLAGS[[:space:]]*=/{ # match the first line | |
| s:[^=]*=::p; # then gobble up all escaped lines | |
| : nextline /\\\\$/{ n; p; b nextline; } }" ${amflags_file}); | |
| eval aclocal_opts=\""${aclocal_opts}"\"; | |
| break; | |
| done; | |
| echo ${aclocal_opts} | |
| } | |
| eautoconf () | |
| { | |
| if [[ ! -f configure.ac && ! -f configure.in ]]; then | |
| echo; | |
| eerror "No configure.{ac,in} present in '${PWD}'!"; | |
| echo; | |
| die "No configure.{ac,in} present!"; | |
| fi; | |
| autotools_run_tool --at-m4flags autoconf "$@" | |
| } | |
| eautoheader () | |
| { | |
| _at_uses_autoheader || return 0; | |
| autotools_run_tool --at-no-fail --at-m4flags autoheader "$@" | |
| } | |
| eautomake () | |
| { | |
| local extra_opts; | |
| local makefile_name; | |
| for makefile_name in {GNUmakefile,{M,m}akefile}.am ""; | |
| do | |
| [[ -f ${makefile_name} ]] && break; | |
| done; | |
| if [[ -z ${makefile_name} ]]; then | |
| _at_uses_automake || return 0; | |
| else | |
| if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name%.am}.in ]]; then | |
| local used_automake; | |
| local installed_automake; | |
| installed_automake=$(WANT_AUTOMAKE= automake --version | head -n 1 | sed -e 's:.*(GNU automake) ::'); | |
| used_automake=$(head -n 1 < ${makefile_name%.am}.in | sed -e 's:.*by automake \(.*\) from .*:\1:'); | |
| if [[ ${installed_automake} != ${used_automake} ]]; then | |
| einfo "Automake used for the package (${used_automake}) differs from"; | |
| einfo "the installed version (${installed_automake})."; | |
| eautoreconf; | |
| return 0; | |
| fi; | |
| fi; | |
| fi; | |
| [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS && -f README ]] || extra_opts="${extra_opts} --foreign"; | |
| autotools_run_tool automake --add-missing --copy ${extra_opts} "$@" | |
| } | |
| eautopoint () | |
| { | |
| autotools_run_tool autopoint "$@" | |
| } | |
| eautoreconf () | |
| { | |
| local x g multitop; | |
| if [[ -z ${AT_TOPLEVEL_EAUTORECONF} ]]; then | |
| AT_TOPLEVEL_EAUTORECONF="yes"; | |
| multitop="yes"; | |
| multijob_init; | |
| fi; | |
| if [[ -z ${AT_NO_RECURSIVE} ]]; then | |
| for x in $(autotools_check_macro_val AC_CONFIG_SUBDIRS); | |
| do | |
| if [[ -d ${x} ]]; then | |
| pushd "${x}" > /dev/null; | |
| AT_NOELIBTOOLIZE="yes" multijob_child_init eautoreconf || die; | |
| popd > /dev/null; | |
| fi; | |
| done; | |
| fi; | |
| einfo "Running eautoreconf in '${PWD}' ..."; | |
| local m4dirs=$(autotools_check_macro_val AC_CONFIG_{AUX,MACRO}_DIR); | |
| [[ -n ${m4dirs} ]] && mkdir -p ${m4dirs}; | |
| local i tools=(glibgettext false "autotools_run_tool glib-gettextize --copy --force" gettext false "autotools_run_tool --at-missing autopoint --force" intltool false "autotools_run_tool intltoolize --automake --copy --force" gtkdoc false "autotools_run_tool --at-missing gtkdocize --copy" gnomedoc false "autotools_run_tool --at-missing gnome-doc-prepare --copy --force" libtool false "_elibtoolize --install --copy --force"); | |
| for ((i = 0; i < ${#tools[@]}; i += 3 )) | |
| do | |
| if _at_uses_${tools[i]}; then | |
| tools[i+1]=true; | |
| ${tools[i+2]}; | |
| fi; | |
| done; | |
| local rerun_aclocal=false; | |
| eaclocal; | |
| for ((i = 0; i < ${#tools[@]}; i += 3 )) | |
| do | |
| if ! ${tools[i+1]} && _at_uses_${tools[i]}; then | |
| ${tools[i+2]}; | |
| rerun_aclocal=true; | |
| fi; | |
| done; | |
| ${rerun_aclocal} && eaclocal; | |
| eautoconf; | |
| eautoheader; | |
| [[ ${AT_NOEAUTOMAKE} != "yes" ]] && FROM_EAUTORECONF="yes" eautomake ${AM_OPTS}; | |
| if [[ ${AT_NOELIBTOOLIZE} != "yes" ]]; then | |
| S=${PWD} elibtoolize --force; | |
| fi; | |
| if [[ -n ${multitop} ]]; then | |
| unset AT_TOPLEVEL_EAUTORECONF; | |
| multijob_finish || die; | |
| fi; | |
| return 0 | |
| } | |
| ebeep () | |
| { | |
| local n; | |
| if [[ -z ${EBEEP_IGNORE} ]]; then | |
| for ((n=1 ; n <= ${1:-5} ; n++)) | |
| do | |
| echo -ne "\a"; | |
| sleep 0.1 &>/dev/null; | |
| sleep 0,1 &>/dev/null; | |
| echo -ne "\a"; | |
| sleep 1; | |
| done; | |
| fi | |
| } | |
| econf_build () | |
| { | |
| tc-env_build econf --build=${CBUILD:-${CHOST}} "$@" | |
| } | |
| 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 () | |
| { | |
| [[ $# -eq 0 ]] && return 0; | |
| sed -i 's/\r$//' -- "$@" || die | |
| } | |
| egetent () | |
| { | |
| local db=$1 key=$2; | |
| [[ $# -ge 3 ]] && die "usage: egetent <database> <key>"; | |
| case ${db} in | |
| passwd | group) | |
| ;; | |
| *) | |
| die "sorry, database '${db}' not yet supported; file a bug" | |
| ;; | |
| esac; | |
| case ${CHOST} in | |
| *-darwin[678]) | |
| case ${key} in | |
| *[!0-9]*) | |
| nidump ${db} . | awk -F: "(\$1 ~ /^${key}\$/) {print;exit;}" | |
| ;; | |
| *) | |
| nidump ${db} . | awk -F: "(\$3 == ${key}) {print;exit;}" | |
| ;; | |
| esac | |
| ;; | |
| *-darwin*) | |
| local mykey; | |
| case ${db} in | |
| passwd) | |
| db="Users" mykey="UniqueID" | |
| ;; | |
| group) | |
| db="Groups" mykey="PrimaryGroupID" | |
| ;; | |
| esac; | |
| case ${key} in | |
| *[!0-9]*) | |
| dscl . -read /${db}/${key} 2> /dev/null | grep RecordName | |
| ;; | |
| *) | |
| dscl . -search /${db} ${mykey} ${key} 2> /dev/null | |
| ;; | |
| esac | |
| ;; | |
| *-freebsd* | *-dragonfly*) | |
| case ${db} in | |
| passwd) | |
| db="user" | |
| ;; | |
| *) | |
| ;; | |
| esac; | |
| local opts; | |
| if [[ ${key} == [[:digit:]]* ]]; then | |
| [[ ${db} == "user" ]] && opts="-u" || opts="-g"; | |
| fi; | |
| pw show ${db} ${opts} "${key}" -q | |
| ;; | |
| *-netbsd* | *-openbsd*) | |
| grep "${key}:\*:" /etc/${db} | |
| ;; | |
| *) | |
| nscd -i "${db}" 2> /dev/null; | |
| getent "${db}" "${key}" | |
| ;; | |
| esac | |
| } | |
| egethome () | |
| { | |
| local pos; | |
| [[ $# -eq 1 ]] || die "usage: egethome <user>"; | |
| case ${CHOST} in | |
| *-darwin* | *-freebsd* | *-dragonfly*) | |
| pos=9 | |
| ;; | |
| *) | |
| pos=6 | |
| ;; | |
| esac; | |
| egetent passwd "$1" | cut -d: -f${pos} | |
| } | |
| egetshell () | |
| { | |
| local pos; | |
| [[ $# -eq 1 ]] || die "usage: egetshell <user>"; | |
| case ${CHOST} in | |
| *-darwin* | *-freebsd* | *-dragonfly*) | |
| pos=10 | |
| ;; | |
| *) | |
| pos=7 | |
| ;; | |
| esac; | |
| egetent passwd "$1" | cut -d: -f${pos} | |
| } | |
| elibtoolize () | |
| { | |
| local x; | |
| local do_portage="no"; | |
| local do_reversedeps="no"; | |
| local do_only_patches="no"; | |
| local do_uclibc="yes"; | |
| local deptoremove=; | |
| local do_shallow="no"; | |
| local force="false"; | |
| local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed"; | |
| for x in "$@"; | |
| do | |
| case ${x} in | |
| --portage) | |
| do_portage="yes" | |
| ;; | |
| --reverse-deps) | |
| do_reversedeps="yes"; | |
| elt_patches+=" fix-relink" | |
| ;; | |
| --patch-only) | |
| do_only_patches="yes" | |
| ;; | |
| --remove-internal-dep=*) | |
| deptoremove=${x#--remove-internal-dep=}; | |
| [[ -n ${deptoremove} ]] && elt_patches+=" rem-int-dep" | |
| ;; | |
| --shallow) | |
| do_shallow="yes" | |
| ;; | |
| --no-uclibc) | |
| do_uclibc="no" | |
| ;; | |
| --force) | |
| force="true" | |
| ;; | |
| *) | |
| eerror "Invalid elibtoolize option: ${x}"; | |
| die "elibtoolize called with ${x} ??" | |
| ;; | |
| esac; | |
| done; | |
| [[ ${do_uclibc} == "yes" ]] && elt_patches+=" uclibc-conf uclibc-ltconf"; | |
| case ${CHOST} in | |
| *-aix*) | |
| elt_patches+=" hardcode aixrtl aix-noundef" | |
| ;; | |
| *-darwin*) | |
| elt_patches+=" darwin-ltconf darwin-ltmain darwin-conf" | |
| ;; | |
| *-solaris*) | |
| elt_patches+=" sol2-conf sol2-ltmain" | |
| ;; | |
| *-freebsd*) | |
| elt_patches+=" fbsd-conf fbsd-ltconf" | |
| ;; | |
| *-hpux*) | |
| elt_patches+=" hpux-conf deplibs hc-flag-ld hardcode hardcode-relink relink-prog no-lc" | |
| ;; | |
| *-irix*) | |
| elt_patches+=" irix-ltmain" | |
| ;; | |
| *-mint*) | |
| elt_patches+=" mint-conf" | |
| ;; | |
| esac; | |
| if $(tc-getLD) --version 2>&1 | grep -qs 'GNU gold'; then | |
| elt_patches+=" gold-conf"; | |
| fi; | |
| set --; | |
| if [[ ${do_shallow} == "yes" ]]; then | |
| [[ -f ${S}/ltmain.sh ]] && set -- "${S}"; | |
| else | |
| set -- $(find "${S}" -name ltmain.sh -printf '%h '); | |
| fi; | |
| local d p; | |
| for d in "$@"; | |
| do | |
| export ELT_APPLIED_PATCHES=; | |
| if [[ -f ${d}/.elibtoolized ]]; then | |
| ${force} || continue; | |
| fi; | |
| local outfunc="einfo"; | |
| [[ -f ${d}/.elibtoolized ]] && outfunc="ewarn"; | |
| ${outfunc} "Running elibtoolize in: ${d#${WORKDIR}/}/"; | |
| if [[ ${outfunc} == "ewarn" ]]; then | |
| ewarn " We've already been run in this tree; you should"; | |
| ewarn " avoid this if possible (perhaps by filing a bug)"; | |
| fi; | |
| for p in ${elt_patches}; | |
| do | |
| local ret=0; | |
| case ${p} in | |
| portage) | |
| if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| rem-int-dep) | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}" "${deptoremove}"; | |
| ret=$? | |
| ;; | |
| fix-relink) | |
| if grep -qs 'inst_prefix_dir' "${d}/ltmain.sh"; then | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| max_cmd_len) | |
| if grep -qs 'max_cmd_len' "${d}/ltmain.sh"; then | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| as-needed) | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}"; | |
| ret=$? | |
| ;; | |
| uclibc-conf) | |
| if grep -qs 'Transform linux' "${d}/configure"; then | |
| ELT_walk_patches "${d}/configure" "${p}"; | |
| ret=$?; | |
| else | |
| if [[ ! -e ${d}/configure ]] && grep -qs 'Transform linux' "${d}/../configure"; then | |
| ELT_walk_patches "${d}/../configure" "${p}"; | |
| ret=$?; | |
| fi; | |
| fi | |
| ;; | |
| uclibc-ltconf) | |
| if [[ -s ${d}/ltconfig ]]; then | |
| ELT_walk_patches "${d}/ltconfig" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| fbsd-conf) | |
| if grep -qs 'version_type=freebsd-' "${d}/configure"; then | |
| ELT_walk_patches "${d}/configure" "${p}"; | |
| ret=$?; | |
| else | |
| if [[ ! -e ${d}/configure ]] && grep -qs 'version_type=freebsd-' "${d}/../configure"; then | |
| ELT_walk_patches "${d}/../configure" "${p}"; | |
| ret=$?; | |
| fi; | |
| fi | |
| ;; | |
| fbsd-ltconf) | |
| if [[ -s ${d}/ltconfig ]]; then | |
| ELT_walk_patches "${d}/ltconfig" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| darwin-conf) | |
| if grep -qs '&& echo \.so ||' "${d}/configure"; then | |
| ELT_walk_patches "${d}/configure" "${p}"; | |
| ret=$?; | |
| else | |
| if [[ ! -e ${d}/configure ]] && grep -qs '&& echo \.so ||' "${d}/../configure"; then | |
| ELT_walk_patches "${d}/../configure" "${p}"; | |
| ret=$?; | |
| fi; | |
| fi | |
| ;; | |
| darwin-ltconf) | |
| if [[ -s ${d}/ltconfig ]]; then | |
| ELT_walk_patches "${d}/ltconfig" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| darwin-ltmain) | |
| if [[ -e ${d}/ltmain.sh ]] && ! grep -qs 'verstring="-compatibility_version' "${d}/ltmain.sh"; then | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| aixrtl | hpux-conf) | |
| ret=1; | |
| local subret=0; | |
| while [[ $subret -eq 0 ]]; do | |
| subret=1; | |
| if [[ -e ${d}/configure ]]; then | |
| ELT_walk_patches "${d}/configure" "${p}"; | |
| subret=$?; | |
| else | |
| if [[ ! -e ${d}/configure && -e ${d}/../configure ]]; then | |
| ELT_walk_patches "${d}/../configure" "${p}"; | |
| subret=$?; | |
| fi; | |
| fi; | |
| if [[ $subret -eq 0 ]]; then | |
| ret=0; | |
| fi; | |
| done | |
| ;; | |
| mint-conf | gold-conf | sol2-conf) | |
| ret=1; | |
| local subret=1; | |
| if [[ -e ${d}/configure ]]; then | |
| ELT_walk_patches "${d}/configure" "${p}"; | |
| subret=$?; | |
| else | |
| if [[ -e ${d}/../configure ]]; then | |
| ELT_walk_patches "${d}/../configure" "${p}"; | |
| subret=$?; | |
| else | |
| if [[ -e ${d}/../../configure ]]; then | |
| ELT_walk_patches "${d}/../../configure" "${p}"; | |
| subret=$?; | |
| fi; | |
| fi; | |
| fi; | |
| if [[ $subret -eq 0 ]]; then | |
| ret=0; | |
| fi | |
| ;; | |
| install-sh) | |
| ELT_walk_patches "${d}/install-sh" "${p}"; | |
| ret=$? | |
| ;; | |
| cross) | |
| if tc-is-cross-compiler; then | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}"; | |
| ret=$?; | |
| fi | |
| ;; | |
| *) | |
| ELT_walk_patches "${d}/ltmain.sh" "${p}"; | |
| ret=$? | |
| ;; | |
| esac; | |
| if [[ ${ret} -ne 0 ]]; then | |
| case ${p} in | |
| relink) | |
| local version=$(ELT_libtool_version "${d}/ltmain.sh"); | |
| if ! grep -qs 'inst_prefix_dir' "${d}/ltmain.sh" && [[ $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then | |
| ewarn " Could not apply relink.patch!"; | |
| fi | |
| ;; | |
| portage) | |
| if [[ ${do_portage} == "yes" ]]; then | |
| if ! grep -qs 'We do not want portage' "${d}/ltmain.sh"; then | |
| echo; | |
| eerror "Portage patch requested, but failed to apply!"; | |
| eerror "Please file a bug report to add a proper patch."; | |
| die "Portage patch requested, but failed to apply!"; | |
| fi; | |
| else | |
| if grep -qs 'We do not want portage' "${d}/ltmain.sh"; then | |
| :; | |
| else | |
| local version=$(ELT_libtool_version "${d}"/ltmain.sh); | |
| echo; | |
| eerror "Portage patch failed to apply (ltmain.sh version ${version})!"; | |
| eerror "Please file a bug report to add a proper patch."; | |
| die "Portage patch failed to apply!"; | |
| fi; | |
| ELT_APPLIED_PATCHES="portage"; | |
| fi | |
| ;; | |
| uclibc-*) | |
| [[ ${CHOST} == *-uclibc ]] && ewarn " uClibc patch set '${p}' failed to apply!" | |
| ;; | |
| fbsd-*) | |
| if [[ ${CHOST} == *-freebsd* ]]; then | |
| if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${d}/configure" "${d}/../configure" 2>/dev/null) ]]; then | |
| eerror " FreeBSD patch set '${p}' failed to apply!"; | |
| die "FreeBSD patch set '${p}' failed to apply!"; | |
| fi; | |
| fi | |
| ;; | |
| darwin-*) | |
| [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${p}' failed to apply!" | |
| ;; | |
| esac; | |
| fi; | |
| done; | |
| if [[ -z ${ELT_APPLIED_PATCHES} ]]; then | |
| if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then | |
| ewarn "Cannot apply any patches, please file a bug about this"; | |
| die; | |
| fi; | |
| fi; | |
| rm -f "${d}/libtool"; | |
| > "${d}/.elibtoolized"; | |
| done | |
| } | |
| elt_patch_dir () | |
| { | |
| local d="${ECLASSDIR}/ELT-patches"; | |
| if [[ ! -d ${d} ]]; then | |
| d="${ECLASSDIR_LOCAL}/ELT-patches"; | |
| fi; | |
| echo "${d}" | |
| } | |
| 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 () | |
| { | |
| _assert_pkg_ebuild_phase ${FUNCNAME}; | |
| 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 egid=$1; | |
| shift; | |
| if [[ ! -z ${egid} ]]; then | |
| if [[ ${egid} -gt 0 ]]; then | |
| if [[ -n $(egetent group ${egid}) ]]; then | |
| 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}"; | |
| if [[ $# -gt 0 ]]; then | |
| die "extra arguments no longer supported; please file a bug"; | |
| fi; | |
| function _enewgroup_next_gid () | |
| { | |
| if [[ ${egid} == *[!0-9]* ]]; then | |
| for ((egid = 101; egid <= 999; egid++)) | |
| do | |
| [[ -z $(egetent group ${egid}) ]] && break; | |
| done; | |
| fi | |
| }; | |
| case ${CHOST} in | |
| *-darwin*) | |
| _enewgroup_next_gid; | |
| dscl . create "/groups/${egroup}" gid ${egid}; | |
| dscl . create "/groups/${egroup}" passwd '*' | |
| ;; | |
| *-freebsd* | *-dragonfly*) | |
| _enewgroup_next_gid; | |
| pw groupadd "${egroup}" -g ${egid} || die | |
| ;; | |
| *-netbsd*) | |
| _enewgroup_next_gid; | |
| groupadd -g ${egid} "${egroup}" || die | |
| ;; | |
| *) | |
| local opts; | |
| if [[ ${egid} == *[!0-9]* ]]; then | |
| opts=""; | |
| else | |
| opts="-g ${egid}"; | |
| fi; | |
| groupadd -r ${opts} "${egroup}" || die | |
| ;; | |
| esac | |
| } | |
| enewuser () | |
| { | |
| _assert_pkg_ebuild_phase ${FUNCNAME}; | |
| 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+=(-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 eshell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; | |
| do | |
| [[ -x ${ROOT}${eshell} ]] && break; | |
| done; | |
| if [[ ${eshell} == "/dev/null" ]]; then | |
| eerror "Unable to identify the shell to use, proceeding with userland default."; | |
| case ${USERLAND} in | |
| GNU) | |
| eshell="/bin/false" | |
| ;; | |
| BSD) | |
| eshell="/sbin/nologin" | |
| ;; | |
| Darwin) | |
| eshell="/usr/sbin/nologin" | |
| ;; | |
| *) | |
| die "Unable to identify the default shell for userland ${USERLAND}" | |
| ;; | |
| esac; | |
| fi; | |
| fi; | |
| einfo " - Shell: ${eshell}"; | |
| opts+=(-s "${eshell}"); | |
| local ehome=$1; | |
| shift; | |
| if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then | |
| ehome="/dev/null"; | |
| fi; | |
| einfo " - Home: ${ehome}"; | |
| opts+=(-d "${ehome}"); | |
| local egroups=$1; | |
| shift; | |
| local g egroups_arr; | |
| IFS="," read -r -a egroups_arr <<< "${egroups}"; | |
| shift; | |
| if [[ ${#egroups_arr[@]} -gt 0 ]]; then | |
| local defgroup exgroups; | |
| for g in "${egroups_arr[@]}"; | |
| do | |
| 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+=",${g}"; | |
| fi; | |
| done; | |
| opts+=(-g "${defgroup}"); | |
| if [[ ! -z ${exgroups} ]]; then | |
| opts+=(-G "${exgroups:1}"); | |
| fi; | |
| fi; | |
| einfo " - Groups: ${egroups:-(none)}"; | |
| if [[ $# -gt 0 ]]; then | |
| die "extra arguments no longer supported; please file a bug"; | |
| else | |
| local comment="added by portage for ${PN}"; | |
| opts+=(-c "${comment}"); | |
| einfo " - GECOS: ${comment}"; | |
| fi; | |
| case ${CHOST} in | |
| *-darwin*) | |
| 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}"; | |
| for g in "${egroups_arr[@]}"; | |
| do | |
| dscl . merge "/groups/${g}" users "${euser}"; | |
| done | |
| ;; | |
| *-freebsd* | *-dragonfly*) | |
| pw useradd "${euser}" "${opts[@]}" || die | |
| ;; | |
| *-netbsd*) | |
| useradd "${opts[@]}" "${euser}" || die | |
| ;; | |
| *-openbsd*) | |
| useradd -u ${euid} -s "${eshell}" -d "${ehome}" -g "${egroups}" "${euser}" || die | |
| ;; | |
| *) | |
| useradd -r "${opts[@]}" "${euser}" || die | |
| ;; | |
| esac; | |
| if [[ ! -e ${ROOT}/${ehome} ]]; then | |
| einfo " - Creating ${ehome} in ${ROOT}"; | |
| mkdir -p "${ROOT}/${ehome}"; | |
| chown "${euser}" "${ROOT}/${ehome}"; | |
| chmod 755 "${ROOT}/${ehome}"; | |
| fi | |
| } | |
| epatch () | |
| { | |
| function _epatch_draw_line () | |
| { | |
| [[ -z $1 ]] && set "$(printf "%65s" '')"; | |
| echo "${1//?/=}" | |
| }; | |
| unset P4CONFIG P4PORT P4USER; | |
| local EPATCH_OPTS=(${EPATCH_OPTS[*]}); | |
| while [[ $# -gt 0 ]]; do | |
| case $1 in | |
| -*) | |
| EPATCH_OPTS+=("$1") | |
| ;; | |
| *) | |
| break | |
| ;; | |
| esac; | |
| shift; | |
| done; | |
| if [[ $# -gt 1 ]]; then | |
| local m; | |
| for m in "$@"; | |
| do | |
| epatch "${m}"; | |
| done; | |
| return 0; | |
| fi; | |
| local SINGLE_PATCH="no"; | |
| [[ $# -eq 0 ]] && set -- "${EPATCH_SOURCE}"; | |
| if [[ -f $1 ]]; then | |
| SINGLE_PATCH="yes"; | |
| set -- "$1"; | |
| local EPATCH_SUFFIX=$1; | |
| else | |
| if [[ -d $1 ]]; then | |
| set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"}; | |
| else | |
| if [[ -f ${EPATCH_SOURCE}/$1 ]]; then | |
| epatch "${EPATCH_SOURCE}/$1"; | |
| return $?; | |
| else | |
| [[ $# -ne 0 ]] && EPATCH_SOURCE=$1; | |
| 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; | |
| fi; | |
| fi; | |
| EPATCH_OPTS="${EPATCH_COMMON_OPTS} ${EPATCH_OPTS[*]}"; | |
| local PIPE_CMD; | |
| case ${EPATCH_SUFFIX##*\.} in | |
| xz) | |
| PIPE_CMD="xz -dc" | |
| ;; | |
| lzma) | |
| PIPE_CMD="lzma -dc" | |
| ;; | |
| bz2) | |
| PIPE_CMD="bzip2 -dc" | |
| ;; | |
| gz | Z | z) | |
| PIPE_CMD="gzip -dc" | |
| ;; | |
| ZIP | zip) | |
| PIPE_CMD="unzip -p" | |
| ;; | |
| *) | |
| ;; | |
| esac; | |
| [[ ${SINGLE_PATCH} == "no" ]] && einfo "${EPATCH_MULTI_MSG}"; | |
| local x; | |
| for x in "$@"; | |
| do | |
| [[ ! -f ${x} ]] && continue; | |
| local patchname=${x##*/}; | |
| local a=${patchname#*_}; | |
| a=${a%%_*}; | |
| if ! [[ ${SINGLE_PATCH} == "yes" || ${EPATCH_FORCE} == "yes" || ${a} == all || ${a} == ${ARCH} ]]; then | |
| continue; | |
| fi; | |
| if [[ -n ${EPATCH_EXCLUDE} ]]; then | |
| eshopts_push -o noglob; | |
| local ex; | |
| for ex in ${EPATCH_EXCLUDE}; | |
| do | |
| if [[ ${patchname} == ${ex} ]]; then | |
| eshopts_pop; | |
| continue 2; | |
| fi; | |
| done; | |
| eshopts_pop; | |
| 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; | |
| local STDERR_TARGET="${T}/${patchname}.out"; | |
| if [[ -e ${STDERR_TARGET} ]]; then | |
| STDERR_TARGET="${T}/${patchname}-$$.out"; | |
| fi; | |
| printf "***** %s *****\nPWD: %s\n\n" "${patchname}" "${PWD}" > "${STDERR_TARGET}"; | |
| local count=0; | |
| local PATCH_TARGET; | |
| if [[ -n ${PIPE_CMD} ]]; then | |
| PATCH_TARGET="${T}/$$.patch"; | |
| echo "PIPE_COMMAND: ${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> "${STDERR_TARGET}"; | |
| if ! ( ${PIPE_CMD} "${x}" > "${PATCH_TARGET}" ) >> "${STDERR_TARGET}" 2>&1; then | |
| echo; | |
| eerror "Could not extract patch!"; | |
| count=5; | |
| break; | |
| fi; | |
| else | |
| PATCH_TARGET=${x}; | |
| fi; | |
| local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }'); | |
| if [[ -n ${abs_paths} ]]; then | |
| count=1; | |
| printf "NOTE: skipping -p0 due to absolute paths in patch:\n%s\n" "${abs_paths}" >> "${STDERR_TARGET}"; | |
| fi; | |
| local rel_paths=$(egrep -n '^[-+]{3} [^ ]*[.][.]/' "${PATCH_TARGET}"); | |
| if [[ -n ${rel_paths} ]]; then | |
| eqawarn "QA Notice: Your patch uses relative paths '../'."; | |
| eqawarn " In the future this will cause a failure."; | |
| eqawarn "${rel_paths}"; | |
| fi; | |
| local patch_cmd; | |
| while [[ ${count} -lt 5 ]]; do | |
| patch_cmd="${BASH_ALIASES[patch]:-patch} -p${count} ${EPATCH_OPTS}"; | |
| ( _epatch_draw_line "***** ${patchname} *****"; | |
| echo; | |
| echo "PATCH COMMAND: ${patch_cmd} < '${PATCH_TARGET}'"; | |
| echo; | |
| _epatch_draw_line "***** ${patchname} *****"; | |
| ${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1; | |
| ret=$?; | |
| echo; | |
| echo "patch program exited with status ${ret}"; | |
| exit ${ret} ) >> "${STDERR_TARGET}"; | |
| if [ $? -eq 0 ]; then | |
| ( _epatch_draw_line "***** ${patchname} *****"; | |
| echo; | |
| echo "ACTUALLY APPLYING ${patchname} ..."; | |
| echo; | |
| _epatch_draw_line "***** ${patchname} *****"; | |
| ${patch_cmd} < "${PATCH_TARGET}" 2>&1; | |
| ret=$?; | |
| echo; | |
| echo "patch program exited with status ${ret}"; | |
| exit ${ret} ) >> "${STDERR_TARGET}"; | |
| if [ $? -ne 0 ]; then | |
| echo; | |
| eerror "A dry-run of patch command succeeded, but actually"; | |
| eerror "applying the patch failed!"; | |
| count=5; | |
| fi; | |
| break; | |
| fi; | |
| : $(( count++ )); | |
| done; | |
| if [[ -n ${PIPE_CMD} ]]; then | |
| rm -f "${PATCH_TARGET}"; | |
| fi; | |
| if [[ ${count} -ge 5 ]]; then | |
| echo; | |
| eerror "Failed Patch: ${patchname} !"; | |
| eerror " ( ${PATCH_TARGET} )"; | |
| eerror; | |
| eerror "Include in your bugreport the contents of:"; | |
| eerror; | |
| eerror " ${STDERR_TARGET}"; | |
| echo; | |
| die "Failed Patch: ${patchname}!"; | |
| fi; | |
| rm -f "${STDERR_TARGET}"; | |
| cat >> "${T}/epatch.log" <<-EOF | |
| PATCH: ${x} | |
| CMD: ${patch_cmd} | |
| PWD: ${PWD} | |
| EOF | |
| eend 0; | |
| done; | |
| [[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching"; | |
| : | |
| } | |
| epatch_user () | |
| { | |
| [[ $# -ne 0 ]] && die "epatch_user takes no options"; | |
| local applied="${T}/epatch_user.log"; | |
| [[ -e ${applied} ]] && return 2; | |
| local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches; | |
| for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT}}; | |
| do | |
| EPATCH_SOURCE=${base}/${CTARGET}/${check}; | |
| [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check}; | |
| [[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check}; | |
| if [[ -d ${EPATCH_SOURCE} ]]; then | |
| EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch; | |
| echo "${EPATCH_SOURCE}" > "${applied}"; | |
| return 0; | |
| fi; | |
| done; | |
| echo "none" > "${applied}"; | |
| return 1 | |
| } | |
| 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 | |
| } | |
| esethome () | |
| { | |
| _assert_pkg_ebuild_phase ${FUNCNAME}; | |
| local euser=$1; | |
| shift; | |
| if [[ -z ${euser} ]]; then | |
| eerror "No username specified !"; | |
| die "Cannot call esethome without a username"; | |
| fi; | |
| if [[ -z $(egetent passwd "${euser}") ]]; then | |
| ewarn "User does not exist, cannot set home dir -- skipping."; | |
| return 1; | |
| fi; | |
| local ehome=$1; | |
| shift; | |
| if [[ -z ${ehome} ]]; then | |
| eerror "No home directory specified !"; | |
| die "Cannot call esethome without a home directory or '-1'"; | |
| fi; | |
| if [[ ${ehome} == "-1" ]]; then | |
| ehome="/dev/null"; | |
| fi; | |
| if [[ $(egethome "${euser}") == ${ehome} ]]; then | |
| return 0; | |
| fi; | |
| einfo "Updating home for user '${euser}' ..."; | |
| einfo " - Home: ${ehome}"; | |
| if [[ ! -e ${ROOT}/${ehome} ]]; then | |
| einfo " - Creating ${ehome} in ${ROOT}"; | |
| mkdir -p "${ROOT}/${ehome}"; | |
| chown "${euser}" "${ROOT}/${ehome}"; | |
| chmod 755 "${ROOT}/${ehome}"; | |
| fi; | |
| case ${CHOST} in | |
| *-darwin*) | |
| dscl . change "/users/${euser}" home "${ehome}" | |
| ;; | |
| *-freebsd* | *-dragonfly*) | |
| pw usermod "${euser}" -d "${ehome}" && return 0; | |
| [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home"; | |
| eerror "There was an error when attempting to update the home directory for ${euser}"; | |
| eerror "Please update it manually on your system:"; | |
| eerror "\t pw usermod \"${euser}\" -d \"${ehome}\"" | |
| ;; | |
| *) | |
| usermod -d "${ehome}" "${euser}" && return 0; | |
| [[ $? == 8 ]] && eerror "${euser} is in use, cannot update home"; | |
| eerror "There was an error when attempting to update the home directory for ${euser}"; | |
| eerror "Please update it manually on your system (as root):"; | |
| eerror "\t usermod -d \"${ehome}\" \"${euser}\"" | |
| ;; | |
| esac | |
| } | |
| eshopts_pop () | |
| { | |
| local s; | |
| estack_pop eshopts s || die "${FUNCNAME}: unbalanced push"; | |
| if [[ ${s} == "shopt -"* ]]; then | |
| eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}"; | |
| else | |
| set +$- || die "${FUNCNAME}: sanity: invalid shell settings: $-"; | |
| set -${s} || die "${FUNCNAME}: sanity: unable to restore saved shell settings: ${s}"; | |
| fi | |
| } | |
| eshopts_push () | |
| { | |
| if [[ $1 == -[su] ]]; then | |
| estack_push eshopts "$(shopt -p)"; | |
| [[ $# -eq 0 ]] && return 0; | |
| shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*"; | |
| else | |
| estack_push eshopts $-; | |
| [[ $# -eq 0 ]] && return 0; | |
| set "$@" || die "${FUNCNAME}: bad options to set: $*"; | |
| fi | |
| } | |
| estack_pop () | |
| { | |
| [[ $# -eq 0 || $# -gt 2 ]] && die "estack_pop: incorrect # of arguments"; | |
| local __estack_name="__ESTACK_$1__"; | |
| shift; | |
| local __estack_retvar=$1; | |
| shift; | |
| eval local __estack_i=\${#${__estack_name}\[@\]}; | |
| [[ $(( --__estack_i )) -eq -1 ]] && return 1; | |
| if [[ -n ${__estack_retvar} ]]; then | |
| eval ${__estack_retvar}=\"\${${__estack_name}\[${__estack_i}\]}\"; | |
| fi; | |
| eval unset ${__estack_name}\[${__estack_i}\] | |
| } | |
| estack_push () | |
| { | |
| [[ $# -eq 0 ]] && die "estack_push: incorrect # of arguments"; | |
| local stack_name="__ESTACK_$1__"; | |
| shift; | |
| eval ${stack_name}+=\( \"\$@\" \) | |
| } | |
| esvn_clean () | |
| { | |
| [[ -z $* ]] && set -- .; | |
| find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf | |
| } | |
| eumask_pop () | |
| { | |
| [[ $# -eq 0 ]] || die "${FUNCNAME}: we take no options"; | |
| local s; | |
| estack_pop eumask s || die "${FUNCNAME}: unbalanced push"; | |
| umask ${s} || die "${FUNCNAME}: sanity: could not restore umask: ${s}" | |
| } | |
| eumask_push () | |
| { | |
| estack_push eumask "$(umask)"; | |
| umask "$@" || die "${FUNCNAME}: bad options to umask: $*" | |
| } | |
| filter-flags () | |
| { | |
| _filter-hardened "$@"; | |
| local v; | |
| for v in $(all-flag-vars); | |
| do | |
| _filter-var ${v} "$@"; | |
| done; | |
| return 0 | |
| } | |
| filter-ldflags () | |
| { | |
| _filter-var LDFLAGS "$@"; | |
| return 0 | |
| } | |
| filter-lfs-flags () | |
| { | |
| [[ $# -ne 0 ]] && 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 | |
| } | |
| gcc-fullversion () | |
| { | |
| _gcc_fullversion '$1.$2.$3' "$@" | |
| } | |
| gcc-major-version () | |
| { | |
| _gcc_fullversion '$1' "$@" | |
| } | |
| gcc-micro-version () | |
| { | |
| _gcc_fullversion '$3' "$@" | |
| } | |
| gcc-minor-version () | |
| { | |
| _gcc_fullversion '$2' "$@" | |
| } | |
| gcc-specs-directive () | |
| { | |
| local directive subdname subdirective; | |
| directive="$(_gcc-specs-directive_raw $1)"; | |
| while [[ ${directive} == *%\(*\)* ]]; do | |
| subdname=${directive/*%\(}; | |
| subdname=${subdname/\)*}; | |
| subdirective="$(_gcc-specs-directive_raw ${subdname})"; | |
| directive="${directive//\%(${subdname})/${subdirective}}"; | |
| done; | |
| echo "${directive}"; | |
| return 0 | |
| } | |
| gcc-specs-nostrict () | |
| { | |
| local directive; | |
| directive=$(gcc-specs-directive cc1); | |
| return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]) | |
| } | |
| gcc-specs-now () | |
| { | |
| local directive; | |
| directive=$(gcc-specs-directive link_command); | |
| return $([[ "${directive/\{!nonow:}" != "${directive}" ]]) | |
| } | |
| gcc-specs-pie () | |
| { | |
| local directive; | |
| directive=$(gcc-specs-directive cc1); | |
| return $([[ "${directive/\{!nopie:}" != "${directive}" ]]) | |
| } | |
| gcc-specs-relro () | |
| { | |
| local directive; | |
| directive=$(gcc-specs-directive link_command); | |
| return $([[ "${directive/\{!norelro:}" != "${directive}" ]]) | |
| } | |
| gcc-specs-ssp () | |
| { | |
| local directive; | |
| directive=$(gcc-specs-directive cc1); | |
| return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]) | |
| } | |
| gcc-specs-ssp-to-all () | |
| { | |
| local directive; | |
| directive=$(gcc-specs-directive cc1); | |
| return $([[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]) | |
| } | |
| gcc-version () | |
| { | |
| _gcc_fullversion '$1.$2' "$@" | |
| } | |
| gen_usr_ldscript () | |
| { | |
| local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname); | |
| [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/; | |
| tc-is-static-only && return; | |
| case ${CTARGET:-${CHOST}} in | |
| *-darwin*) | |
| ;; | |
| *linux* | *-freebsd* | *-openbsd* | *-netbsd*) | |
| use prefix && return 0 | |
| ;; | |
| *) | |
| return 0 | |
| ;; | |
| esac; | |
| dodir /usr/${libdir}; | |
| if [[ $1 == "-a" ]]; then | |
| auto=true; | |
| shift; | |
| dodir /${libdir}; | |
| fi; | |
| 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 | |
| local tlib; | |
| if ${auto}; then | |
| lib="lib${lib}${suffix}"; | |
| else | |
| [[ -r ${ED}/${libdir}/${lib} ]] || continue; | |
| fi; | |
| case ${CTARGET:-${CHOST}} in | |
| *-darwin*) | |
| if ${auto}; then | |
| tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib}); | |
| else | |
| tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib}); | |
| fi; | |
| [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}"; | |
| tlib=${tlib##*/}; | |
| if ${auto}; then | |
| mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die; | |
| if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then | |
| mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die; | |
| fi; | |
| rm -f "${ED}"/${libdir}/${lib}; | |
| fi; | |
| if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then | |
| chmod u+w "${ED}${libdir}/${tlib}"; | |
| local nowrite=yes; | |
| fi; | |
| install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed"; | |
| [[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}"; | |
| pushd "${ED}/usr/${libdir}" > /dev/null; | |
| ln -snf "../../${libdir}/${tlib}" "${lib}"; | |
| popd > /dev/null | |
| ;; | |
| *) | |
| if ${auto}; then | |
| tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib}); | |
| [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}"; | |
| mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die; | |
| if [[ ${tlib} != ${lib}* ]]; then | |
| mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die; | |
| fi; | |
| rm -f "${ED}"/${libdir}/${lib}; | |
| else | |
| tlib=${lib}; | |
| fi; | |
| cat > "${ED}/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. This "fake" dynamic lib is a linker script that | |
| redirects the linker to the real lib. And yes, this works in the cross- | |
| compiling scenario as the sysroot-ed linker will prepend the real path. | |
| See bug http://bugs.gentoo.org/4411 for more info. | |
| */ | |
| ${output_format} | |
| GROUP ( ${EPREFIX}/${libdir}/${tlib} ) | |
| END_LDSCRIPT | |
| ;; | |
| esac | |
| fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"; | |
| done | |
| } | |
| get-flag () | |
| { | |
| local f var findflag="$1"; | |
| for var in $(all-flag-vars); | |
| do | |
| for f in ${!var}; | |
| do | |
| if [ "${f/${findflag}}" != "${f}" ]; then | |
| printf "%s\n" "${f/-${findflag}=}"; | |
| return 0; | |
| fi; | |
| done; | |
| done; | |
| return 1 | |
| } | |
| 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=${2:-${ABI:-${DEFAULT_ABI:-default}}}; | |
| local var="${flag}_${abi}"; | |
| echo ${!var} | |
| } | |
| get_after_major_version () | |
| { | |
| echo $(get_version_component_range 2- "${1:-${PV}}") | |
| } | |
| get_all_abis () | |
| { | |
| local x order="" mvar dvar; | |
| mvar="MULTILIB_ABIS"; | |
| dvar="DEFAULT_ABI"; | |
| if [[ -n $1 ]]; then | |
| mvar="$1_${mvar}"; | |
| dvar="$1_${dvar}"; | |
| fi; | |
| if [[ -z ${!mvar} ]]; then | |
| echo "default"; | |
| return 0; | |
| fi; | |
| for x in ${!mvar}; | |
| do | |
| if [[ ${x} != ${!dvar} ]]; then | |
| order="${order:+${order} }${x}"; | |
| fi; | |
| done; | |
| order="${order:+${order} }${!dvar}"; | |
| echo ${order}; | |
| return 0 | |
| } | |
| get_all_libdirs () | |
| { | |
| local libdirs abi; | |
| for abi in ${MULTILIB_ABIS}; | |
| do | |
| libdirs+=" $(get_abi_LIBDIR ${abi})"; | |
| done; | |
| [[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib"; | |
| echo "${libdirs}" | |
| } | |
| get_all_version_components () | |
| { | |
| eshopts_push -s extglob; | |
| local ver_str=${1:-${PV}} result; | |
| result=(); | |
| if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]]; then | |
| echo ${VERSIONATOR_CACHE_RESULT}; | |
| eshopts_pop; | |
| return; | |
| fi; | |
| export VERSIONATOR_CACHE_VER_STR=${ver_str}; | |
| while [[ -n $ver_str ]]; do | |
| case "${ver_str::1}" in | |
| [[:digit:]]) | |
| result+=("${ver_str%%[^[:digit:]]*}"); | |
| ver_str=${ver_str##+([[:digit:]])} | |
| ;; | |
| [-_.]) | |
| result+=("${ver_str::1}"); | |
| ver_str=${ver_str:1} | |
| ;; | |
| [[:alpha:]]) | |
| local not_match=${ver_str##+([[:alpha:]])*([[:digit:]])}; | |
| result+=("${ver_str::${#ver_str} - ${#not_match}}"); | |
| ver_str=${not_match} | |
| ;; | |
| *) | |
| result+=("${ver_str::1}"); | |
| ver_str=${ver_str:1} | |
| ;; | |
| esac; | |
| done; | |
| export VERSIONATOR_CACHE_RESULT=${result[*]}; | |
| echo ${result[@]}; | |
| eshopts_pop | |
| } | |
| get_install_abis () | |
| { | |
| local x 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 | |
| has ${x} ${ABI_DENY} || order="${order} ${x}"; | |
| fi; | |
| done; | |
| has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}"; | |
| if [[ -n ${ABI_ALLOW} ]]; then | |
| local ordera=""; | |
| for x in ${order}; | |
| do | |
| if has ${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 () | |
| { | |
| echo $(($(get_version_component_count "${1:-${PV}}" ) - 1)) | |
| } | |
| get_libdir () | |
| { | |
| local CONF_LIBDIR; | |
| if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then | |
| echo ${CONF_LIBDIR_OVERRIDE}; | |
| else | |
| get_abi_LIBDIR; | |
| fi | |
| } | |
| get_libname () | |
| { | |
| local libname; | |
| local ver=$1; | |
| case ${CHOST} in | |
| *-cygwin | mingw* | *-mingw*) | |
| libname="dll" | |
| ;; | |
| *-darwin*) | |
| libname="dylib" | |
| ;; | |
| *-mint*) | |
| libname="irrelevant" | |
| ;; | |
| hppa*-hpux*) | |
| libname="sl" | |
| ;; | |
| *) | |
| libname="so" | |
| ;; | |
| esac; | |
| if [[ -z $* ]]; then | |
| echo ".${libname}"; | |
| else | |
| for ver in "$@"; | |
| do | |
| case ${CHOST} in | |
| *-darwin*) | |
| echo ".${ver}.${libname}" | |
| ;; | |
| *-mint*) | |
| echo ".${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 () | |
| { | |
| local c=($(get_all_version_components "${1:-${PV}}")); | |
| echo ${c[0]} | |
| } | |
| get_makefile_extract_function () | |
| { | |
| local a='' b='' mkfunc='getfilevar'; | |
| a="$(getfilevar VERSION ${KERNEL_MAKEFILE})"; | |
| b="$(getfilevar_noexec VERSION ${KERNEL_MAKEFILE})"; | |
| [[ "${a}" != "${b}" ]] && mkfunc='getfilevar_noexec'; | |
| echo "${mkfunc}" | |
| } | |
| get_modname () | |
| { | |
| local modname; | |
| local ver=$1; | |
| case ${CHOST} in | |
| *-darwin*) | |
| modname="bundle" | |
| ;; | |
| *) | |
| modname="so" | |
| ;; | |
| esac; | |
| echo ".${modname}" | |
| } | |
| get_running_version () | |
| { | |
| KV_FULL=$(uname -r); | |
| if [[ -f ${ROOT}/lib/modules/${KV_FULL}/source/Makefile && -f ${ROOT}/lib/modules/${KV_FULL}/build/Makefile ]]; then | |
| KERNEL_DIR=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/source); | |
| KBUILD_OUTPUT=$(readlink -f ${ROOT}/lib/modules/${KV_FULL}/build); | |
| unset KV_FULL; | |
| get_version; | |
| return $?; | |
| else | |
| 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//-*}; | |
| KV_EXTRA="${KV_FULL#${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}}"; | |
| fi; | |
| fi; | |
| fi; | |
| return 0 | |
| } | |
| get_version () | |
| { | |
| local kbuild_output mkfunc tmplocal; | |
| [ -n "${KV_FULL}" ] && return 0; | |
| unset KV_DIR; | |
| [ -z "${get_version_warning_done}" ] && 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 | |
| if [ -z "${get_version_warning_done}" ]; then | |
| get_version_warning_done=1; | |
| qeerror "Unable to find kernel sources at ${KERNEL_DIR}"; | |
| 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; | |
| fi; | |
| return 1; | |
| fi; | |
| if [ -z "${get_version_warning_done}" ]; then | |
| qeinfo "Found kernel source directory:"; | |
| qeinfo " ${KV_DIR}"; | |
| fi; | |
| if [ ! -s "${KV_DIR}/Makefile" ]; then | |
| if [ -z "${get_version_warning_done}" ]; then | |
| get_version_warning_done=1; | |
| 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"; | |
| fi; | |
| return 1; | |
| fi; | |
| OUTPUT_DIR="${OUTPUT_DIR:-${KBUILD_OUTPUT}}"; | |
| KERNEL_MAKEFILE="${KV_DIR}/Makefile"; | |
| mkfunc="$(get_makefile_extract_function "${KERNEL_MAKEFILE}")"; | |
| kbuild_output="$(${mkfunc} KBUILD_OUTPUT ${KERNEL_MAKEFILE})"; | |
| OUTPUT_DIR="${OUTPUT_DIR:-${kbuild_output}}"; | |
| KV_MAJOR="$(${mkfunc} VERSION ${KERNEL_MAKEFILE})"; | |
| KV_MINOR="$(${mkfunc} PATCHLEVEL ${KERNEL_MAKEFILE})"; | |
| KV_PATCH="$(${mkfunc} SUBLEVEL ${KERNEL_MAKEFILE})"; | |
| KV_EXTRA="$(${mkfunc} EXTRAVERSION ${KERNEL_MAKEFILE})"; | |
| if [ -z "${KV_MAJOR}" -o -z "${KV_MINOR}" -o -z "${KV_PATCH}" ]; then | |
| if [ -z "${get_version_warning_done}" ]; then | |
| get_version_warning_done=1; | |
| qeerror "Could not detect kernel version."; | |
| qeerror "Please ensure that ${KERNEL_DIR} points to a complete set of Linux sources."; | |
| fi; | |
| return 1; | |
| fi; | |
| 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}"; | |
| fi; | |
| KV_OUT_DIR="${KV_OUT_DIR:-${KV_DIR}}"; | |
| if [ -s "${KV_OUT_DIR}"/include/config/kernel.release ]; then | |
| KV_LOCAL=$(<"${KV_OUT_DIR}"/include/config/kernel.release); | |
| else | |
| if [ -s "${KV_OUT_DIR}"/.kernelrelease ]; then | |
| KV_LOCAL=$(<"${KV_OUT_DIR}"/.kernelrelease); | |
| else | |
| KV_LOCAL=; | |
| fi; | |
| fi; | |
| tmplocal=${KV_LOCAL#${KV_MAJOR}.${KV_MINOR}.${KV_PATCH}${KV_EXTRA}}; | |
| if [ "$KV_LOCAL" = "$tmplocal" ]; then | |
| KV_LOCAL=; | |
| else | |
| KV_LOCAL=$tmplocal; | |
| 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 () | |
| { | |
| local a=($(get_version_components "${1:-${PV}}")); | |
| echo ${#a[@]} | |
| } | |
| get_version_component_range () | |
| { | |
| eshopts_push -s extglob; | |
| local c v="${2:-${PV}}" range="${1}" range_start range_end; | |
| local -i 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+=1; | |
| ((i > ${#c[@]})) && eshopts_pop && return; | |
| [[ -n "${c[i]//[-._]}" ]] && j+=1; | |
| done; | |
| while ((j <= range_end)); do | |
| echo -n ${c[i]}; | |
| ((i > ${#c[@]})) && eshopts_pop && return; | |
| [[ -n "${c[i]//[-._]}" ]] && j+=1; | |
| i+=1; | |
| done; | |
| eshopts_pop | |
| } | |
| get_version_components () | |
| { | |
| local c=$(get_all_version_components "${1:-${PV}}"); | |
| echo ${c//[-._]/ } | |
| } | |
| getfilevar () | |
| { | |
| local ERROR basefname basedname myARCH="${ARCH}"; | |
| ERROR=0; | |
| [ -z "${1}" ] && ERROR=1; | |
| [ ! -f "${2}" ] && ERROR=1; | |
| if [ "${ERROR}" = 1 ]; then | |
| echo -e "\n"; | |
| eerror "getfilevar requires 2 variables, with the second a valid file."; | |
| eerror " getfilevar <VARIABLE> <CONFIGFILE>"; | |
| else | |
| basefname="$(basename ${2})"; | |
| basedname="$(dirname ${2})"; | |
| unset ARCH; | |
| echo -e "e:\\n\\t@echo \$(${1})\\ninclude ${basefname}" | make -C "${basedname}" M="${S}" ${BUILD_FIXES} -s -f - 2> /dev/null; | |
| ARCH=${myARCH}; | |
| fi | |
| } | |
| getfilevar_noexec () | |
| { | |
| local ERROR basefname basedname mycat myARCH="${ARCH}"; | |
| ERROR=0; | |
| mycat='cat'; | |
| [ -z "${1}" ] && ERROR=1; | |
| [ ! -f "${2}" ] && ERROR=1; | |
| [ "${2%.gz}" != "${2}" ] && mycat='zcat'; | |
| if [ "${ERROR}" = 1 ]; then | |
| echo -e "\n"; | |
| eerror "getfilevar_noexec requires 2 variables, with the second a valid file."; | |
| eerror " getfilevar_noexec <VARIABLE> <CONFIGFILE>"; | |
| else | |
| ${mycat} "${2}" | sed -n -e "/^[[:space:]]*${1}[[:space:]]*:\\?=[[:space:]]*\(.*\)\$/{ | |
| s,^[^=]*[[:space:]]*=[[:space:]]*,,g ; | |
| s,[[:space:]]*\$,,g ; | |
| p | |
| }"; | |
| fi | |
| } | |
| has_m32 () | |
| { | |
| die "${FUNCNAME}: don't use this anymore" | |
| } | |
| has_m64 () | |
| { | |
| eqawarn "${FUNCNAME}: don't use this anymore"; | |
| 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/ /}" ] | |
| } | |
| in_iuse () | |
| { | |
| debug-print-function ${FUNCNAME} "${@}"; | |
| [[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()"; | |
| local flag=${1}; | |
| local liuse=(${IUSE}); | |
| has "${flag}" "${liuse[@]#[+-]}" | |
| } | |
| is-flag () | |
| { | |
| is-flagq "$@" && echo true | |
| } | |
| is-flagq () | |
| { | |
| [[ -n $2 ]] && die "Usage: is-flag <flag>"; | |
| local var; | |
| for var in $(all-flag-vars); | |
| do | |
| _is_flagq ${var} "$1" && return 0; | |
| done; | |
| return 1 | |
| } | |
| is-ldflag () | |
| { | |
| is-ldflagq "$@" && echo true | |
| } | |
| is-ldflagq () | |
| { | |
| [[ -n $2 ]] && die "Usage: is-ldflag <flag>"; | |
| _is_flagq LDFLAGS $1 | |
| } | |
| is_final_abi () | |
| { | |
| has_multilib_profile || return 0; | |
| set -- $(get_install_abis); | |
| local LAST_ABI=$#; | |
| [[ ${!LAST_ABI} == ${ABI} ]] | |
| } | |
| kernel_is () | |
| { | |
| linux-info_get_any_version; | |
| local operator test value; | |
| 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; | |
| [[ $# -gt 3 ]] && die "Error in kernel-2_kernel_is(): too many parameters"; | |
| : $(( test = (KV_MAJOR << 16) + (KV_MINOR << 8) + KV_PATCH )); | |
| : $(( value = (${1:-${KV_MAJOR}} << 16) + (${2:-${KV_MINOR}} << 8) + ${3:-${KV_PATCH}} )); | |
| [ ${test} ${operator} ${value} ] | |
| } | |
| linux-info_get_any_version () | |
| { | |
| get_version; | |
| if [[ $? -ne 0 ]]; then | |
| ewarn "Unable to calculate Linux Kernel version for build, attempting to use running version"; | |
| get_running_version; | |
| fi | |
| } | |
| linux-info_pkg_setup () | |
| { | |
| linux-info_get_any_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_chkconfig_builtin () | |
| { | |
| linux_config_qa_check linux_chkconfig_builtin; | |
| local RESULT; | |
| local config; | |
| config="${KV_OUT_DIR}/.config"; | |
| [ ! -f "${config}" ] && config="/proc/config.gz"; | |
| RESULT="$(getfilevar_noexec CONFIG_${1} "${config}")"; | |
| [ "${RESULT}" = "y" ] && return 0 || return 1 | |
| } | |
| linux_chkconfig_module () | |
| { | |
| linux_config_qa_check linux_chkconfig_module; | |
| local RESULT; | |
| local config; | |
| config="${KV_OUT_DIR}/.config"; | |
| [ ! -f "${config}" ] && config="/proc/config.gz"; | |
| RESULT="$(getfilevar_noexec CONFIG_${1} "${config}")"; | |
| [ "${RESULT}" = "m" ] && return 0 || return 1 | |
| } | |
| linux_chkconfig_present () | |
| { | |
| linux_config_qa_check linux_chkconfig_present; | |
| local RESULT; | |
| local config; | |
| config="${KV_OUT_DIR}/.config"; | |
| [ ! -f "${config}" ] && config="/proc/config.gz"; | |
| RESULT="$(getfilevar_noexec CONFIG_${1} "${config}")"; | |
| [ "${RESULT}" = "m" -o "${RESULT}" = "y" ] && return 0 || return 1 | |
| } | |
| linux_chkconfig_string () | |
| { | |
| linux_config_qa_check linux_chkconfig_string; | |
| local config; | |
| config="${KV_OUT_DIR}/.config"; | |
| [ ! -f "${config}" ] && config="/proc/config.gz"; | |
| getfilevar_noexec "CONFIG_${1}" "${config}" | |
| } | |
| linux_config_bin_exists () | |
| { | |
| export _LINUX_CONFIG_EXISTS_DONE=1; | |
| [ -s "/proc/config.gz" ] | |
| } | |
| linux_config_exists () | |
| { | |
| linux_config_src_exists || linux_config_bin_exists | |
| } | |
| linux_config_qa_check () | |
| { | |
| local f="$1"; | |
| if [ -z "${_LINUX_CONFIG_EXISTS_DONE}" ]; then | |
| ewarn "QA: You called $f before any linux_config_exists!"; | |
| ewarn "QA: The return value of $f will NOT guaranteed later!"; | |
| fi | |
| } | |
| linux_config_src_exists () | |
| { | |
| export _LINUX_CONFIG_EXISTS_DONE=1; | |
| [ -s "${KV_OUT_DIR}/.config" ] | |
| } | |
| make_desktop_entry () | |
| { | |
| [[ -z $1 ]] && die "make_desktop_entry: You must specify the executable"; | |
| local exec=${1}; | |
| local name=${2:-${PN}}; | |
| local icon=${3:-${PN}}; | |
| local type=${4}; | |
| local fields=${5}; | |
| if [[ -z ${type} ]]; then | |
| local catmaj=${CATEGORY%%-*}; | |
| local catmin=${CATEGORY##*-}; | |
| case ${catmaj} in | |
| app) | |
| case ${catmin} in | |
| accessibility) | |
| type="Utility;Accessibility" | |
| ;; | |
| admin) | |
| type=System | |
| ;; | |
| antivirus) | |
| type=System | |
| ;; | |
| arch) | |
| type="Utility;Archiving" | |
| ;; | |
| backup) | |
| type="Utility;Archiving" | |
| ;; | |
| cdr) | |
| type="AudioVideo;DiscBurning" | |
| ;; | |
| dicts) | |
| type="Office;Dictionary" | |
| ;; | |
| doc) | |
| type=Documentation | |
| ;; | |
| editors) | |
| type="Utility;TextEditor" | |
| ;; | |
| emacs) | |
| type="Development;TextEditor" | |
| ;; | |
| emulation) | |
| type="System;Emulator" | |
| ;; | |
| laptop) | |
| type="Settings;HardwareSettings" | |
| ;; | |
| office) | |
| type=Office | |
| ;; | |
| pda) | |
| type="Office;PDA" | |
| ;; | |
| vim) | |
| type="Development;TextEditor" | |
| ;; | |
| xemacs) | |
| type="Development;TextEditor" | |
| ;; | |
| 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 | |
| ;; | |
| esac; | |
| type="Game;${type}" | |
| ;; | |
| gnome) | |
| type="Gnome;GTK" | |
| ;; | |
| kde) | |
| type="KDE;Qt" | |
| ;; | |
| mail) | |
| type="Network;Email" | |
| ;; | |
| media) | |
| case ${catmin} in | |
| gfx) | |
| type=Graphics | |
| ;; | |
| *) | |
| case ${catmin} in | |
| radio) | |
| type=Tuner | |
| ;; | |
| sound) | |
| type=Audio | |
| ;; | |
| tv) | |
| type=TV | |
| ;; | |
| video) | |
| type=Video | |
| ;; | |
| esac; | |
| type="AudioVideo;${type}" | |
| ;; | |
| esac | |
| ;; | |
| 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 | |
| ;; | |
| voip) | |
| type=Telephony | |
| ;; | |
| 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 | |
| ;; | |
| esac; | |
| type="Education;Science;${type}" | |
| ;; | |
| sys) | |
| type="System" | |
| ;; | |
| www) | |
| case ${catmin} in | |
| client) | |
| type=WebBrowser | |
| ;; | |
| esac; | |
| type="Network;${type}" | |
| ;; | |
| *) | |
| 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"; | |
| type=${type%;}${type:+;}; | |
| eshopts_push -s extglob; | |
| if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then | |
| ewarn "As described in the Icon Theme Specification, icon file extensions are not"; | |
| ewarn "allowed in .desktop files if the value is not an absolute path."; | |
| icon=${icon%.@(xpm|png|svg)}; | |
| fi; | |
| eshopts_pop; | |
| cat > "${desktop}" <<-EOF | |
| [Desktop Entry] | |
| Name=${name} | |
| Type=Application | |
| Comment=${DESCRIPTION} | |
| Exec=${exec} | |
| TryExec=${exec%% *} | |
| Icon=${icon} | |
| Categories=${type} | |
| EOF | |
| if [[ ${fields:-=} != *=* ]]; then | |
| ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}"; | |
| fields="Path=${fields}"; | |
| fi; | |
| [[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}"; | |
| ( insinto /usr/share/applications; | |
| doins "${desktop}" ) || die "installing desktop file failed" | |
| } | |
| make_session_desktop () | |
| { | |
| [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1; | |
| [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1; | |
| local title=$1; | |
| local command=$2; | |
| local desktop=${T}/${wm:-${PN}}.desktop; | |
| shift 2; | |
| cat > "${desktop}" <<-EOF | |
| [Desktop Entry] | |
| Name=${title} | |
| Comment=This session logs you into ${title} | |
| Exec=${command} $* | |
| TryExec=${command} | |
| Type=XSession | |
| EOF | |
| ( insinto /usr/share/xsessions; | |
| doins "${desktop}" ) | |
| } | |
| make_wrapper () | |
| { | |
| local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5; | |
| local tmpwrapper=$(emktemp); | |
| cat > "${tmpwrapper}" <<EOF | |
| #!/bin/sh | |
| cd "${chdir:-.}" | |
| if [ -n "${libdir}" ] ; then | |
| if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then | |
| export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}" | |
| else | |
| export LD_LIBRARY_PATH="${libdir}" | |
| fi | |
| fi | |
| exec ${bin} "\$@" | |
| EOF | |
| chmod go+rx "${tmpwrapper}"; | |
| if [[ -n ${path} ]]; then | |
| ( exeinto "${path}"; | |
| newexe "${tmpwrapper}" "${wrapper}" ) || die; | |
| else | |
| newbin "${tmpwrapper}" "${wrapper}" || die; | |
| fi | |
| } | |
| makeopts_jobs () | |
| { | |
| [[ $# -eq 0 ]] && set -- ${MAKEOPTS}; | |
| local jobs=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' -e 's:.*[[:space:]](-j|--jobs)[[:space:]].*:999:p'); | |
| echo ${jobs:-1} | |
| } | |
| multijob_child_init () | |
| { | |
| local mode="pre"; | |
| case $1 in | |
| --pre) | |
| mode="pre"; | |
| shift | |
| ;; | |
| --post) | |
| mode="post"; | |
| shift | |
| ;; | |
| esac; | |
| if [[ $# -eq 0 ]]; then | |
| trap 'echo ${BASHPID} $? >&'${mj_control_fd} EXIT; | |
| trap 'exit 1' INT TERM; | |
| else | |
| local ret; | |
| [[ ${mode} == "pre" ]] && { | |
| multijob_pre_fork; | |
| ret=$? | |
| }; | |
| ( multijob_child_init; | |
| "$@" ) & [[ ${mode} == "post" ]] && { | |
| multijob_post_fork; | |
| ret=$? | |
| }; | |
| return ${ret}; | |
| fi | |
| } | |
| multijob_finish () | |
| { | |
| local ret=0; | |
| while [[ ${mj_num_jobs} -gt 0 ]]; do | |
| multijob_finish_one; | |
| : $(( ret |= $? )); | |
| done; | |
| wait; | |
| [[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments"; | |
| EBUILD_DEATH_HOOKS=${EBUILD_DEATH_HOOKS/ wait / }; | |
| return ${ret} | |
| } | |
| multijob_finish_one () | |
| { | |
| [[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments"; | |
| local pid ret; | |
| read -r -u ${mj_control_fd} pid ret || die; | |
| : $(( --mj_num_jobs )); | |
| return ${ret} | |
| } | |
| multijob_init () | |
| { | |
| has wait ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" wait "; | |
| local pipe="${T}/multijob.pipe"; | |
| mkfifo "${pipe}"; | |
| redirect_alloc_fd mj_control_fd "${pipe}"; | |
| rm -f "${pipe}"; | |
| mj_max_jobs=$(makeopts_jobs "$@"); | |
| mj_num_jobs=0 | |
| } | |
| multijob_post_fork () | |
| { | |
| _multijob_fork post "$@" | |
| } | |
| multijob_pre_fork () | |
| { | |
| _multijob_fork pre "$@" | |
| } | |
| multilib_env () | |
| { | |
| local CTARGET=${1:-${CTARGET}}; | |
| case ${CTARGET} in | |
| x86_64*) | |
| export CFLAGS_x86=${CFLAGS_x86--m32}; | |
| export CHOST_x86=${CTARGET/x86_64/i686}; | |
| CHOST_x86=${CHOST_x86/%-gnux32/-gnu}; | |
| export CTARGET_x86=${CHOST_x86}; | |
| if [[ ${SYMLINK_LIB} == "yes" ]]; then | |
| export LIBDIR_x86="lib32"; | |
| else | |
| export LIBDIR_x86="lib"; | |
| fi; | |
| export CFLAGS_amd64=${CFLAGS_amd64--m64}; | |
| export CHOST_amd64=${CTARGET/%-gnux32/-gnu}; | |
| export CTARGET_amd64=${CHOST_amd64}; | |
| export LIBDIR_amd64="lib64"; | |
| export CFLAGS_x32=${CFLAGS_x32--mx32}; | |
| export CHOST_x32=${CTARGET/%-gnu/-gnux32}; | |
| export CTARGET_x32=${CHOST_x32}; | |
| export LIBDIR_x32="libx32"; | |
| case ${CTARGET} in | |
| *-gnux32) | |
| : ${MULTILIB_ABIS=x32 amd64 x86}; | |
| : ${DEFAULT_ABI=x32} | |
| ;; | |
| *) | |
| : ${MULTILIB_ABIS=amd64 x86}; | |
| : ${DEFAULT_ABI=amd64} | |
| ;; | |
| esac | |
| ;; | |
| mips64*) | |
| export CFLAGS_o32=${CFLAGS_o32--mabi=32}; | |
| export CHOST_o32=${CTARGET/mips64/mips}; | |
| export CTARGET_o32=${CHOST_o32}; | |
| export LIBDIR_o32="lib"; | |
| export CFLAGS_n32=${CFLAGS_n32--mabi=n32}; | |
| export CHOST_n32=${CTARGET}; | |
| export CTARGET_n32=${CHOST_n32}; | |
| export LIBDIR_n32="lib32"; | |
| export CFLAGS_n64=${CFLAGS_n64--mabi=64}; | |
| export CHOST_n64=${CTARGET}; | |
| export CTARGET_n64=${CHOST_n64}; | |
| export LIBDIR_n64="lib64"; | |
| : ${MULTILIB_ABIS=n64 n32 o32}; | |
| : ${DEFAULT_ABI=n32} | |
| ;; | |
| powerpc64*) | |
| export CFLAGS_ppc=${CFLAGS_ppc--m32}; | |
| export CHOST_ppc=${CTARGET/powerpc64/powerpc}; | |
| export CTARGET_ppc=${CHOST_ppc}; | |
| export LIBDIR_ppc="lib"; | |
| export CFLAGS_ppc64=${CFLAGS_ppc64--m64}; | |
| export CHOST_ppc64=${CTARGET}; | |
| export CTARGET_ppc64=${CHOST_ppc64}; | |
| export LIBDIR_ppc64="lib64"; | |
| : ${MULTILIB_ABIS=ppc64 ppc}; | |
| : ${DEFAULT_ABI=ppc64} | |
| ;; | |
| s390x*) | |
| export CFLAGS_s390=${CFLAGS_s390--m31}; | |
| export CHOST_s390=${CTARGET/s390x/s390}; | |
| export CTARGET_s390=${CHOST_s390}; | |
| export LIBDIR_s390="lib"; | |
| export CFLAGS_s390x=${CFLAGS_s390x--m64}; | |
| export CHOST_s390x=${CTARGET}; | |
| export CTARGET_s390x=${CHOST_s390x}; | |
| export LIBDIR_s390x="lib64"; | |
| : ${MULTILIB_ABIS=s390x s390}; | |
| : ${DEFAULT_ABI=s390x} | |
| ;; | |
| sparc64*) | |
| export CFLAGS_sparc32=${CFLAGS_sparc32--m32}; | |
| export CHOST_sparc32=${CTARGET/sparc64/sparc}; | |
| export CTARGET_sparc32=${CHOST_sparc32}; | |
| export LIBDIR_sparc32="lib"; | |
| export CFLAGS_sparc64=${CFLAGS_sparc64--m64}; | |
| export CHOST_sparc64=${CTARGET}; | |
| export CTARGET_sparc64=${CHOST_sparc64}; | |
| export LIBDIR_sparc64="lib64"; | |
| : ${MULTILIB_ABIS=sparc64 sparc32}; | |
| : ${DEFAULT_ABI=sparc64} | |
| ;; | |
| *) | |
| : ${MULTILIB_ABIS=default}; | |
| : ${DEFAULT_ABI=default} | |
| ;; | |
| esac; | |
| export MULTILIB_ABIS DEFAULT_ABI | |
| } | |
| multilib_toolchain_setup () | |
| { | |
| local v vv; | |
| export ABI=$1; | |
| if [[ ${__DEFAULT_ABI_SAVED} == "true" ]]; then | |
| for v in CHOST CBUILD AS CC CXX LD; | |
| do | |
| vv="__abi_saved_${v}"; | |
| export ${v}="${!vv}"; | |
| unset ${vv}; | |
| done; | |
| unset __DEFAULT_ABI_SAVED; | |
| fi; | |
| if [[ ${ABI} != ${DEFAULT_ABI} ]]; then | |
| for v in CHOST CBUILD AS CC CXX LD; | |
| do | |
| export __abi_saved_${v}="${!v}"; | |
| done; | |
| export __DEFAULT_ABI_SAVED="true"; | |
| export CHOST=$(get_abi_CHOST ${DEFAULT_ABI}); | |
| export CC="$(tc-getCC) $(get_abi_CFLAGS)"; | |
| export CXX="$(tc-getCXX) $(get_abi_CFLAGS)"; | |
| export LD="$(tc-getLD) $(get_abi_LDFLAGS)"; | |
| export CHOST=$(get_abi_CHOST $1); | |
| export CBUILD=$(get_abi_CHOST $1); | |
| fi | |
| } | |
| newicon () | |
| { | |
| _iconins ${FUNCNAME} "$@" | |
| } | |
| newmenu () | |
| { | |
| ( insinto /usr/share/applications; | |
| newins "$@" ) | |
| } | |
| no-as-needed () | |
| { | |
| case $($(tc-getLD) -v 2>&1 </dev/null) in | |
| *GNU*) | |
| echo "-Wl,--no-as-needed" | |
| ;; | |
| esac | |
| } | |
| number_abis () | |
| { | |
| set -- `get_install_abis`; | |
| echo $# | |
| } | |
| path_exists () | |
| { | |
| local opt=$1; | |
| [[ ${opt} == -[ao] ]] && shift || opt="-a"; | |
| [[ $# -eq 0 ]] && return 1; | |
| local p r=0; | |
| for p in "$@"; | |
| do | |
| [[ -e ${p} ]]; | |
| : $(( r += $? )); | |
| done; | |
| case ${opt} in | |
| -a) | |
| return $(( r != 0 )) | |
| ;; | |
| -o) | |
| return $(( r == $# )) | |
| ;; | |
| esac | |
| } | |
| pkg_nofetch () | |
| { | |
| _eapi0_pkg_nofetch "$@" | |
| } | |
| pkg_postinst () | |
| { | |
| elog "The HAL daemon needs to be running for certain applications to"; | |
| elog "work. Suggested is to add the init script to your start-up"; | |
| elog "scripts, this should be done like this :"; | |
| elog "\`rc-update add hald default\`"; | |
| echo; | |
| elog "Access to hal is now protected by either at_console or the plugdev group."; | |
| elog "If you have problems discovering/configuring hardware, try adding"; | |
| elog "yourself to plugdev, or ensuring consolekit is started"; | |
| echo; | |
| elog "IF you have additional applications which consume ACPI events, you"; | |
| elog "should consider installing acpid to allow applications to share ACPI"; | |
| elog "events."; | |
| if use X; then | |
| echo; | |
| elog "If you wish to use a non US layout, you may do so by executing:"; | |
| elog "setxkbmap <layout> or by utilizing your Desktop Environment's"; | |
| elog "Keyboard Layout Settings mechanism."; | |
| elog "Under GNOME, this is gnome-keyboard-properties, and under KDE"; | |
| elog "it is kxkb."; | |
| fi; | |
| echo; | |
| elog "In order have suspend/hibernate function with HAL or apps that use HAL"; | |
| elog "(such as gnome-power-manager), you should build HAL with the laptop"; | |
| elog "useflag which will install pm-utils."; | |
| if use X; then | |
| echo; | |
| elog "X Input Hotplugging (if you build xorg-server with the HAL useflag)"; | |
| elog "reads user specific configuration from /etc/hal/fdi/policy/."; | |
| echo; | |
| elog "You should remove the Input sections from your xorg.conf once you have"; | |
| elog "migrated the rules to a HAL fdi file."; | |
| fi; | |
| ebeep 5; | |
| epause 5 | |
| } | |
| pkg_setup () | |
| { | |
| if use kernel_linux; then | |
| if [[ -e "${ROOT}/usr/src/linux/.config" ]]; then | |
| kernel_is ge 2 6 19 || ewarn "HAL requires a kernel version 2.6.19 or newer"; | |
| if kernel_is lt 2 6 23 && use acpi; then | |
| check_acpi_proc; | |
| fi; | |
| fi; | |
| check_hotplug_net; | |
| check_inotify; | |
| fi; | |
| enewgroup haldaemon; | |
| enewgroup plugdev; | |
| if use kernel_linux; then | |
| enewuser haldaemon -1 "-1" /dev/null ${HALDAEMON_GROUPS_LINUX}; | |
| else | |
| if use kernel_FreeBSD; then | |
| enewuser haldaemon -1 "-1" /dev/null ${HALDAEMON_GROUPS_FREEBSD}; | |
| fi; | |
| fi; | |
| if [[ ${ROOT} == / ]]; then | |
| if use kernel_linux; then | |
| usermod -G ${HALDAEMON_GROUPS_LINUX} haldaemon; | |
| else | |
| if use kernel_FreeBSD; then | |
| pw usermod haldaemon -G ${HALDAEMON_GROUPS_FREEBSD}; | |
| fi; | |
| fi; | |
| fi | |
| } | |
| preserve_old_lib () | |
| { | |
| if [[ ${EBUILD_PHASE} != "preinst" ]]; then | |
| eerror "preserve_old_lib() must be called from pkg_preinst() only"; | |
| die "Invalid preserve_old_lib() usage"; | |
| fi; | |
| [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]"; | |
| has preserve-libs ${FEATURES} && return 0; | |
| local lib dir; | |
| for lib in "$@"; | |
| do | |
| [[ -e ${ROOT}/${lib} ]] || continue; | |
| dir=${lib%/*}; | |
| dodir ${dir} || die "dodir ${dir} failed"; | |
| cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed"; | |
| touch "${D}"/${lib}; | |
| done | |
| } | |
| preserve_old_lib_notify () | |
| { | |
| if [[ ${EBUILD_PHASE} != "postinst" ]]; then | |
| eerror "preserve_old_lib_notify() must be called from pkg_postinst() only"; | |
| die "Invalid preserve_old_lib_notify() usage"; | |
| fi; | |
| has preserve-libs ${FEATURES} && return 0; | |
| local lib notice=0; | |
| for lib in "$@"; | |
| do | |
| [[ -e ${ROOT}/${lib} ]] || continue; | |
| if [[ ${notice} -eq 0 ]]; then | |
| notice=1; | |
| ewarn "Old versions of installed libraries were detected on your system."; | |
| ewarn "In order to avoid breaking packages that depend on these old libs,"; | |
| ewarn "the libraries are not being removed. You need to run revdep-rebuild"; | |
| ewarn "in order to remove these old dependencies. If you do not have this"; | |
| ewarn "helper program, simply emerge the 'gentoolkit' package."; | |
| ewarn; | |
| fi; | |
| ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'"; | |
| done | |
| } | |
| prune_libtool_files () | |
| { | |
| debug-print-function ${FUNCNAME} "$@"; | |
| local removing_all removing_modules opt; | |
| for opt in "$@"; | |
| do | |
| case "${opt}" in | |
| --all) | |
| removing_all=1; | |
| removing_modules=1 | |
| ;; | |
| --modules) | |
| removing_modules=1 | |
| ;; | |
| *) | |
| die "Invalid argument to ${FUNCNAME}(): ${opt}" | |
| ;; | |
| esac; | |
| done; | |
| local f; | |
| local queue=(); | |
| while IFS= read -r -d '' f; do | |
| local archivefile=${f/%.la/.a}; | |
| [[ ${f} != ${archivefile} ]] || die 'regex sanity check failed'; | |
| local reason pkgconfig_scanned; | |
| if grep -q '^shouldnotlink=yes$' "${f}"; then | |
| if [[ -f ${archivefile} ]]; then | |
| einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)"; | |
| queue+=("${archivefile}"); | |
| fi; | |
| if [[ -n ${removing_modules} ]]; then | |
| reason='module'; | |
| fi; | |
| else | |
| if [[ -n ${removing_all} ]]; then | |
| reason='requested'; | |
| else | |
| if [[ ! -f ${archivefile} ]]; then | |
| reason='no static archive'; | |
| else | |
| if [[ ! -n $(sed -nre "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" "${f}") ]]; then | |
| reason='no libs & flags'; | |
| else | |
| if [[ ! -n ${pkgconfig_scanned} ]]; then | |
| local pc_libs=(); | |
| if [[ ! -n ${removing_all} ]]; then | |
| local pc; | |
| local tf=${T}/prune-lt-files.pc; | |
| local pkgconf=$(tc-getPKG_CONFIG); | |
| while IFS= read -r -d '' pc; do | |
| local arg; | |
| sed -e '/^Requires:/d' "${pc}" > "${tf}"; | |
| for arg in $("${pkgconf}" --libs "${tf}"); | |
| do | |
| [[ ${arg} == -l* ]] && pc_libs+=(lib${arg#-l}.la); | |
| done; | |
| done < <(find "${D}" -type f -name '*.pc' -print0); | |
| rm -f "${tf}"; | |
| fi; | |
| pkgconfig_scanned=1; | |
| fi; | |
| has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc'; | |
| fi; | |
| fi; | |
| fi; | |
| fi; | |
| if [[ -n ${reason} ]]; then | |
| einfo "Removing unnecessary ${f#${D%/}} (${reason})"; | |
| queue+=("${f}"); | |
| fi; | |
| done < <(find "${D}" -xtype f -name '*.la' -print0); | |
| if [[ -n ${queue[@]} ]]; then | |
| rm -f "${queue[@]}"; | |
| fi | |
| } | |
| qeerror () | |
| { | |
| qout eerror "${@}" | |
| } | |
| qeinfo () | |
| { | |
| qout einfo "${@}" | |
| } | |
| qewarn () | |
| { | |
| qout ewarn "${@}" | |
| } | |
| 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 "$@" | |
| } | |
| redirect_alloc_fd () | |
| { | |
| local var=$1 file=$2 redir=${3:-"<>"}; | |
| if [[ $(( (BASH_VERSINFO[0] << 8) + BASH_VERSINFO[1] )) -ge $(( (4 << 8) + 1 )) ]]; then | |
| eval "exec {${var}}${redir}'${file}'"; | |
| else | |
| local fd=10; | |
| while :; do | |
| if [[ ! -e /dev/fd/${fd} ]] && [[ ! -L /dev/fd/${fd} ]]; then | |
| eval "exec ${fd}${redir}'${file}'" && break; | |
| fi; | |
| [[ ${fd} -gt 1024 ]] && die 'could not locate a free temp fd !?'; | |
| : $(( ++fd )); | |
| done; | |
| : $(( ${var} = fd )); | |
| 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 ]] && die "Usage: replace-flags <old flag> <new flag>"; | |
| local f var new; | |
| for var in $(all-flag-vars); | |
| do | |
| new=(); | |
| for f in ${!var}; | |
| do | |
| [[ ${f} == ${1} ]] && f=${2}; | |
| new+=("${f}"); | |
| done; | |
| eval export ${var}=\""${new[*]}"\"; | |
| 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 () | |
| { | |
| local c=($(get_all_version_components "${2:-${PV}}")); | |
| c=${c[@]//[-._]/$1}; | |
| echo ${c// } | |
| } | |
| replace_version_separator () | |
| { | |
| eshopts_push -s extglob; | |
| local w c v="${3:-${PV}}"; | |
| declare -i i found=0; | |
| w=${1:-1}; | |
| c=($(get_all_version_components ${v})); | |
| if [[ ${w} != *[[:digit:]]* ]]; then | |
| for ((i = 0; i < ${#c[@]}; i++)) | |
| do | |
| if [[ ${c[i]} == ${w} ]]; then | |
| c[i]=${2}; | |
| break; | |
| fi; | |
| done; | |
| else | |
| for ((i = 0; i < ${#c[@]}; i++)) | |
| do | |
| if [[ -n "${c[i]//[^-._]}" ]]; then | |
| found+=1; | |
| if ((found == w)); then | |
| c[i]=${2}; | |
| break; | |
| fi; | |
| fi; | |
| done; | |
| fi; | |
| c=${c[*]}; | |
| echo ${c// }; | |
| eshopts_pop | |
| } | |
| require_configured_kernel () | |
| { | |
| if ! linux_config_src_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 | |
| } | |
| set_arch_to_kernel () | |
| { | |
| export ARCH=$(tc-arch-kernel) | |
| } | |
| set_arch_to_portage () | |
| { | |
| export ARCH=$(tc-arch) | |
| } | |
| setup-allowed-flags () | |
| { | |
| ALLOWED_FLAGS="-pipe"; | |
| ALLOWED_FLAGS+=" -O -O1 -O2 -Os -mcpu -march -mtune"; | |
| ALLOWED_FLAGS+=" -fstack-protector -fstack-protector-all"; | |
| ALLOWED_FLAGS+=" -fbounds-checking -fno-strict-overflow"; | |
| ALLOWED_FLAGS+=" -fno-PIE -fno-pie -fno-unit-at-a-time"; | |
| ALLOWED_FLAGS+=" -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+"; | |
| ALLOWED_FLAGS+=" -fno-ident -fpermissive"; | |
| ALLOWED_FLAGS+=" -W* -w"; | |
| ALLOWED_FLAGS+=" -fno-stack-protector -fno-stack-protector-all -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer"; | |
| ALLOWED_FLAGS+=" -mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1 -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow -mno-popcnt -mno-abm -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -mplt -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mfloat-gprs -mspe -mno-spe -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mx32 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt -m*-toc -mfloat-abi=* -D* -U*"; | |
| ALLOWED_FLAGS+=" -mno-fma4 -mno-movbe -mno-xop -mno-lwp"; | |
| ALLOWED_FLAGS+=" -mno-fsgsbase -mno-rdrnd -mno-f16c -mno-bmi -mno-tbm"; | |
| ALLOWED_FLAGS+=" -mno-avx2 -mno-bmi2 -mno-fma -mno-lzcnt"; | |
| ALLOWED_FLAGS+=" -I* -L* -R* -Wl,*"; | |
| export ALLOWED_FLAGS; | |
| return 0 | |
| } | |
| src_compile () | |
| { | |
| _eapi2_src_compile "$@" | |
| } | |
| src_configure () | |
| { | |
| local acpi="$(use_enable acpi)"; | |
| local backend=; | |
| local hardware=; | |
| append-flags -rdynamic; | |
| if use kernel_linux; then | |
| backend="linux"; | |
| else | |
| if use kernel_FreeBSD; then | |
| backend="freebsd"; | |
| else | |
| eerror "Invalid backend"; | |
| fi; | |
| fi; | |
| if use kernel_linux; then | |
| if use acpi; then | |
| if kernel_is lt 2 6 22; then | |
| acpi="$acpi --enable-acpi-ibm --enable-acpi-toshiba"; | |
| else | |
| acpi="$acpi --disable-acpi-ibm --disable-acpi-toshiba"; | |
| fi; | |
| acpi="$acpi --enable-acpi-proc --enable-acpi-acpid"; | |
| else | |
| acpi="$acpi --disable-acpi-ibm --disable-acpi-toshiba"; | |
| acpi="$acpi --disable-acpi-proc --disable-acpi-acpid"; | |
| fi; | |
| hardware="--with-cpufreq --with-usb-csr --with-keymaps"; | |
| use arm && hardware="$hardware --with-omap --enable-pmu"; | |
| use ppc && hardware="$hardware --enable-pmu"; | |
| if use x86 || use amd64; then | |
| hardware="$hardware --with-macbook --with-macbookpro"; | |
| fi; | |
| if use dell; then | |
| hardware="$hardware --with-dell-backlight"; | |
| else | |
| hardware="$hardware --without-dell-backlight"; | |
| fi; | |
| hardware="$hardware --enable-sonypic"; | |
| else | |
| hardware="--without-cpufreq --without-usb-csr --without-keymaps"; | |
| hardware="$hardware --without-omap"; | |
| hardware="$hardware --without-dell-backlight"; | |
| hardware="$hardware --enable-acpi-ibm --enable-acpi-toshiba"; | |
| hardware="$hardware --disable-sonypic"; | |
| fi; | |
| econf --with-backend=${backend} --with-os-type=gentoo --with-pid-file=/var/run/hald.pid --with-hwdata=/usr/share/misc --with-socket-dir=/var/run/hald --with-udev-prefix=/etc --enable-umount-helper --enable-man-pages --disable-acl-management --enable-pci --disable-policy-kit --disable-console-kit $(use_enable apm) $(use_enable debug verbose-mode) $(use_enable disk-partition parted) $(use_enable doc docbook-docs) $(use_enable doc gtk-doc) --docdir=/usr/share/doc/${PF} --localstatedir=/var ${acpi} ${hardware} || die "configure failed" | |
| } | |
| src_install () | |
| { | |
| emake DESTDIR="${D}" install || die; | |
| dodoc AUTHORS ChangeLog NEWS README || die "docs failed"; | |
| exeinto /$(get_libdir)/udev/; | |
| newexe "${FILESDIR}/hal-unmount.dev" hal_unmount || die "udev helper failed"; | |
| cp "${FILESDIR}/0.5.14-hald.rc.1" "${WORKDIR}/" || die "failed to copy hald.rc.1"; | |
| newinitd "${WORKDIR}/0.5.14-hald.rc.1" hald || die "init script failed"; | |
| cp "${FILESDIR}/0.5.14-hald.conf" "${WORKDIR}/" || die "failed to copy hald.conf"; | |
| if use debug; then | |
| sed -e 's:HALD_VERBOSE="no":HALD_VERBOSE="yes":' -i "${WORKDIR}/0.5.14-hald.conf" || die "failed to change verbose"; | |
| fi; | |
| newconfd "${WORKDIR}/0.5.14-hald.conf" hald || die "failed to install hald.conf"; | |
| if use X; then | |
| dodoc "${WORKDIR}/${PATCHNAME}/config-examples/"*.fdi || die "dodoc X examples failed"; | |
| fi; | |
| keepdir /media; | |
| keepdir /etc/hal/fdi/{information,policy,preprobe}; | |
| keepdir /var/cache/hald; | |
| keepdir /var/run/hald; | |
| keepdir /var/lib/hal | |
| } | |
| src_prepare () | |
| { | |
| EPATCH_MULTI_MSG="Applying Gentoo Patchset ..." EPATCH_SUFFIX="patch" EPATCH_SOURCE="${WORKDIR}/${PATCHNAME}/patches/" EPATCH_FORCE="yes" epatch; | |
| eautoreconf | |
| } | |
| src_test () | |
| { | |
| _eapi0_src_test "$@" | |
| } | |
| src_unpack () | |
| { | |
| _eapi0_src_unpack "$@" | |
| } | |
| strip-flags () | |
| { | |
| local x y var; | |
| setup-allowed-flags; | |
| set -f; | |
| for var in $(all-flag-vars); | |
| do | |
| local new=(); | |
| for x in ${!var}; | |
| do | |
| local flag=${x%%=*}; | |
| for y in ${ALLOWED_FLAGS}; | |
| do | |
| if [[ -z ${flag%%${y}} ]]; then | |
| new+=("${x}"); | |
| break; | |
| fi; | |
| done; | |
| done; | |
| if _is_flagq ${var} "-O*" && ! _is_flagq new "-O*"; then | |
| new+=(-O2); | |
| fi; | |
| eval export ${var}=\""${new[*]}"\"; | |
| done; | |
| set +f; | |
| 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 | |
| has ${f} ${ls} && newls="${newls} ${f}"; | |
| else | |
| has ${f} ${ls} || newls="${newls} ${f}"; | |
| fi; | |
| done; | |
| ls=${newls}; | |
| done; | |
| else | |
| ls="$@"; | |
| fi; | |
| nols=""; | |
| newls=""; | |
| for f in ${LINGUAS}; | |
| do | |
| if has ${f} ${ls}; then | |
| newls="${newls} ${f}"; | |
| else | |
| nols="${nols} ${f}"; | |
| fi; | |
| done; | |
| [[ -n ${nols} ]] && einfo "Sorry, but ${PN} does not support the LINGUAS:" ${nols}; | |
| export LINGUAS=${newls:1} | |
| } | |
| strip-unsupported-flags () | |
| { | |
| export CFLAGS=$(test-flags-CC ${CFLAGS}); | |
| export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}); | |
| export FFLAGS=$(test-flags-F77 ${FFLAGS}); | |
| export FCFLAGS=$(test-flags-FC ${FCFLAGS}) | |
| } | |
| 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 | |
| aarch64*be) | |
| echo big | |
| ;; | |
| aarch64) | |
| echo little | |
| ;; | |
| 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-env_build () | |
| { | |
| tc-export_build_env; | |
| CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@" | |
| } | |
| tc-export () | |
| { | |
| local var; | |
| for var in "$@"; | |
| do | |
| [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'"; | |
| eval tc-get${var} > /dev/null; | |
| done | |
| } | |
| tc-export_build_env () | |
| { | |
| tc-export "$@"; | |
| : ${BUILD_CFLAGS:=-O1 -pipe}; | |
| : ${BUILD_CXXFLAGS:=-O1 -pipe}; | |
| : ${BUILD_CPPFLAGS:=}; | |
| : ${BUILD_LDFLAGS:=}; | |
| export BUILD_{C,CXX,CPP,LD}FLAGS | |
| } | |
| tc-getAR () | |
| { | |
| tc-getPROG AR ar "$@" | |
| } | |
| tc-getAS () | |
| { | |
| tc-getPROG AS as "$@" | |
| } | |
| tc-getBUILD_AR () | |
| { | |
| tc-getBUILD_PROG AR ar "$@" | |
| } | |
| tc-getBUILD_AS () | |
| { | |
| tc-getBUILD_PROG AS as "$@" | |
| } | |
| tc-getBUILD_CC () | |
| { | |
| tc-getBUILD_PROG CC gcc "$@" | |
| } | |
| tc-getBUILD_CPP () | |
| { | |
| tc-getBUILD_PROG CPP cpp "$@" | |
| } | |
| tc-getBUILD_CXX () | |
| { | |
| tc-getBUILD_PROG CXX g++ "$@" | |
| } | |
| tc-getBUILD_LD () | |
| { | |
| tc-getBUILD_PROG LD ld "$@" | |
| } | |
| tc-getBUILD_NM () | |
| { | |
| tc-getBUILD_PROG NM nm "$@" | |
| } | |
| tc-getBUILD_OBJCOPY () | |
| { | |
| tc-getBUILD_PROG OBJCOPY objcopy "$@" | |
| } | |
| tc-getBUILD_PKG_CONFIG () | |
| { | |
| tc-getBUILD_PROG PKG_CONFIG pkg-config "$@" | |
| } | |
| tc-getBUILD_PROG () | |
| { | |
| _tc-getPROG CBUILD "BUILD_$1 $1_FOR_BUILD HOST$1" "${@:2}" | |
| } | |
| tc-getBUILD_RANLIB () | |
| { | |
| tc-getBUILD_PROG RANLIB ranlib "$@" | |
| } | |
| tc-getBUILD_STRIP () | |
| { | |
| tc-getBUILD_PROG STRIP strip "$@" | |
| } | |
| tc-getCC () | |
| { | |
| tc-getPROG CC gcc "$@" | |
| } | |
| tc-getCPP () | |
| { | |
| tc-getPROG CPP cpp "$@" | |
| } | |
| tc-getCXX () | |
| { | |
| tc-getPROG CXX g++ "$@" | |
| } | |
| tc-getDLLWRAP () | |
| { | |
| tc-getPROG DLLWRAP dllwrap "$@" | |
| } | |
| tc-getF77 () | |
| { | |
| tc-getPROG F77 gfortran "$@" | |
| } | |
| tc-getFC () | |
| { | |
| tc-getPROG FC gfortran "$@" | |
| } | |
| tc-getGCJ () | |
| { | |
| tc-getPROG GCJ gcj "$@" | |
| } | |
| tc-getLD () | |
| { | |
| tc-getPROG LD ld "$@" | |
| } | |
| tc-getNM () | |
| { | |
| tc-getPROG NM nm "$@" | |
| } | |
| tc-getOBJCOPY () | |
| { | |
| tc-getPROG OBJCOPY objcopy "$@" | |
| } | |
| tc-getPKG_CONFIG () | |
| { | |
| tc-getPROG PKG_CONFIG pkg-config "$@" | |
| } | |
| tc-getPROG () | |
| { | |
| _tc-getPROG CHOST "$@" | |
| } | |
| tc-getRANLIB () | |
| { | |
| tc-getPROG RANLIB ranlib "$@" | |
| } | |
| tc-getRC () | |
| { | |
| tc-getPROG RC windres "$@" | |
| } | |
| tc-getSTRIP () | |
| { | |
| tc-getPROG STRIP strip "$@" | |
| } | |
| tc-has-openmp () | |
| { | |
| local base="${T}/test-tc-openmp"; | |
| cat > "${base}.c" <<-EOF | |
| #include <omp.h> | |
| int main() { | |
| int nthreads, tid, ret = 0; | |
| #pragma omp parallel private(nthreads, tid) | |
| { | |
| tid = omp_get_thread_num(); | |
| nthreads = omp_get_num_threads(); ret += tid + nthreads; | |
| } | |
| return ret; | |
| } | |
| EOF | |
| $(tc-getCC "$@") -fopenmp "${base}.c" -o "${base}" &>/dev/null; | |
| local ret=$?; | |
| rm -f "${base}"*; | |
| return ${ret} | |
| } | |
| tc-has-tls () | |
| { | |
| local base="${T}/test-tc-tls"; | |
| cat > "${base}.c" <<-EOF | |
| int foo(int *i) { | |
| static __thread int j = 0; | |
| return *i ? j : *i; | |
| } | |
| EOF | |
| local flags; | |
| case $1 in | |
| -s) | |
| flags="-S" | |
| ;; | |
| -c) | |
| flags="-c" | |
| ;; | |
| -l) | |
| ;; | |
| -*) | |
| die "Usage: tc-has-tls [-c|-l] [toolchain prefix]" | |
| ;; | |
| esac; | |
| : ${flags:=-fPIC -shared -Wl,-z,defs}; | |
| [[ $1 == -* ]] && shift; | |
| $(tc-getCC "$@") ${flags} "${base}.c" -o "${base}" &>/dev/null; | |
| local ret=$?; | |
| rm -f "${base}"*; | |
| return ${ret} | |
| } | |
| tc-is-cross-compiler () | |
| { | |
| return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]]) | |
| } | |
| tc-is-softfloat () | |
| { | |
| local CTARGET=${CTARGET:-${CHOST}}; | |
| case ${CTARGET} in | |
| bfin* | h8300*) | |
| echo "only" | |
| ;; | |
| *) | |
| if [[ ${CTARGET//_/-} == *-softfloat-* ]]; then | |
| echo "yes"; | |
| else | |
| if [[ ${CTARGET//_/-} == *-softfp-* ]]; then | |
| echo "softfp"; | |
| else | |
| echo "no"; | |
| fi; | |
| fi | |
| ;; | |
| esac | |
| } | |
| tc-is-static-only () | |
| { | |
| local host=${CTARGET:-${CHOST}}; | |
| return $([[ ${host} == *-mint* ]]) | |
| } | |
| tc-ninja_magic_to_arch () | |
| { | |
| function ninj () | |
| { | |
| [[ ${type} == "kern" ]] && echo $1 || echo $2 | |
| }; | |
| local type=$1; | |
| local host=$2; | |
| [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; | |
| local KV=${KV:-${KV_FULL}}; | |
| [[ ${type} == "kern" ]] && [[ -z ${KV} ]] && ewarn "QA: Kernel version could not be determined, please inherit kernel-2 or linux-info"; | |
| case ${host} in | |
| aarch64*) | |
| ninj aarch64 arm | |
| ;; | |
| alpha*) | |
| echo alpha | |
| ;; | |
| arm*) | |
| echo arm | |
| ;; | |
| avr*) | |
| ninj avr32 avr | |
| ;; | |
| bfin*) | |
| ninj blackfin bfin | |
| ;; | |
| cris*) | |
| echo cris | |
| ;; | |
| hppa*) | |
| ninj parisc hppa | |
| ;; | |
| i?86*) | |
| if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then | |
| echo i386; | |
| else | |
| echo x86; | |
| fi | |
| ;; | |
| ia64*) | |
| echo ia64 | |
| ;; | |
| m68*) | |
| echo m68k | |
| ;; | |
| mips*) | |
| echo mips | |
| ;; | |
| nios2*) | |
| echo nios2 | |
| ;; | |
| nios*) | |
| echo nios | |
| ;; | |
| powerpc*) | |
| if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]]; then | |
| echo powerpc; | |
| else | |
| if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]]; 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*freebsd*) | |
| echo amd64 | |
| ;; | |
| x86_64*) | |
| if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then | |
| echo x86; | |
| else | |
| ninj x86_64 amd64; | |
| fi | |
| ;; | |
| *) | |
| echo unknown | |
| ;; | |
| esac | |
| } | |
| test-flag-CC () | |
| { | |
| test-flag-PROG "CC" "$1" | |
| } | |
| test-flag-CXX () | |
| { | |
| test-flag-PROG "CXX" "$1" | |
| } | |
| test-flag-F77 () | |
| { | |
| test-flag-PROG "F77" "$1" | |
| } | |
| test-flag-FC () | |
| { | |
| test-flag-PROG "FC" "$1" | |
| } | |
| test-flag-PROG () | |
| { | |
| local comp=$1; | |
| local flag=$2; | |
| [[ -z ${comp} || -z ${flag} ]] && return 1; | |
| local PROG=$(tc-get${comp}); | |
| ${PROG} "${flag}" -c -o /dev/null -xc /dev/null > /dev/null 2>&1 | |
| } | |
| test-flags () | |
| { | |
| test-flags-CC "$@" | |
| } | |
| test-flags-CC () | |
| { | |
| test-flags-PROG "CC" "$@" | |
| } | |
| test-flags-CXX () | |
| { | |
| test-flags-PROG "CXX" "$@" | |
| } | |
| test-flags-F77 () | |
| { | |
| test-flags-PROG "F77" "$@" | |
| } | |
| test-flags-FC () | |
| { | |
| test-flags-PROG "FC" "$@" | |
| } | |
| test-flags-PROG () | |
| { | |
| local comp=$1; | |
| local flags; | |
| local x; | |
| shift; | |
| [[ -z ${comp} ]] && return 1; | |
| for x in "$@"; | |
| do | |
| test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}"; | |
| done; | |
| echo "${flags}"; | |
| [[ -n ${flags} ]] | |
| } | |
| test_version_info () | |
| { | |
| if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then | |
| return 0; | |
| else | |
| return 1; | |
| fi | |
| } | |
| uclibctoolize () | |
| { | |
| die "Use elibtoolize" | |
| } | |
| use_if_iuse () | |
| { | |
| in_iuse $1 || return 1; | |
| use $1 | |
| } | |
| usex () | |
| { | |
| use "$1" && echo "${2-yes}$4" || echo "${3-no}$5" | |
| } | |
| 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 () | |
| { | |
| eshopts_push -s extglob; | |
| local ver_a=${1} ver_b=${2} parts_a parts_b; | |
| local cur_tok_a cur_tok_b num_part_a num_part_b; | |
| local -i cur_idx_a=0 cur_idx_b=0 prev_idx_a prev_idx_b; | |
| parts_a=($(get_all_version_components "${ver_a}" )); | |
| parts_b=($(get_all_version_components "${ver_b}" )); | |
| local -i inf_loop=0; | |
| while true; do | |
| inf_loop+=1; | |
| ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]"; | |
| prev_idx_a=cur_idx_a; | |
| prev_idx_b=cur_idx_b; | |
| cur_tok_a=${parts_a[cur_idx_a]}; | |
| cur_tok_b=${parts_b[cur_idx_b]}; | |
| if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then | |
| cur_idx_a+=1; | |
| [[ ${parts_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+=1; | |
| [[ ${parts_b[cur_idx_b]} == . ]] && cur_idx_b+=1; | |
| else | |
| cur_tok_b=; | |
| fi; | |
| [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]] && break; | |
| [[ -z ${cur_tok_a} ]] && eshopts_pop && return 1; | |
| [[ -z ${cur_tok_b} ]] && eshopts_pop && return 3; | |
| if (( prev_idx_a != 0 && prev_idx_b != 0 )) && [[ ${cur_tok_a} == 0* || ${cur_tok_b} == 0* ]]; then | |
| cur_tok_a=${cur_tok_a%%+(0)}; | |
| cur_tok_b=${cur_tok_b%%+(0)}; | |
| [[ ${cur_tok_a} < ${cur_tok_b} ]] && eshopts_pop && return 1; | |
| [[ ${cur_tok_a} > ${cur_tok_b} ]] && eshopts_pop && return 3; | |
| else | |
| cur_tok_a=${cur_tok_a##+(0)}; | |
| cur_tok_b=${cur_tok_b##+(0)}; | |
| : ${cur_tok_a:=0}; | |
| : ${cur_tok_b:=0}; | |
| ((cur_tok_a < cur_tok_b)) && eshopts_pop && return 1; | |
| ((cur_tok_a > cur_tok_b)) && eshopts_pop && return 3; | |
| fi; | |
| 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+=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+=1; | |
| else | |
| letter_b=@; | |
| fi; | |
| [[ ${letter_a} < ${letter_b} ]] && eshopts_pop && return 1; | |
| [[ ${letter_a} > ${letter_b} ]] && eshopts_pop && return 3; | |
| inf_loop=0; | |
| while true; do | |
| inf_loop+=1; | |
| ((inf_loop > 20)) && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]"; | |
| [[ ${parts_a[cur_idx_a]} == _ ]] && ((cur_idx_a++)); | |
| [[ ${parts_b[cur_idx_b]} == _ ]] && ((cur_idx_b++)); | |
| cur_tok_a=${parts_a[cur_idx_a]}; | |
| cur_tok_b=${parts_b[cur_idx_b]}; | |
| num_part_a=0; | |
| num_part_b=0; | |
| if has ${cur_tok_a%%+([0-9])} "alpha" "beta" "pre" "rc" "p"; then | |
| cur_idx_a+=1; | |
| num_part_a=${cur_tok_a##+([a-z])}; | |
| num_part_a=${num_part_a##+(0)}; | |
| : ${num_part_a:=0}; | |
| cur_tok_a=${cur_tok_a%%+([0-9])}; | |
| else | |
| cur_tok_a=; | |
| fi; | |
| if has ${cur_tok_b%%+([0-9])} alpha beta pre rc p; then | |
| cur_idx_b+=1; | |
| num_part_b=${cur_tok_b##+([a-z])}; | |
| num_part_b=${num_part_b##+(0)}; | |
| : ${num_part_b:=0}; | |
| cur_tok_b=${cur_tok_b%%+([0-9])}; | |
| else | |
| cur_tok_b=; | |
| fi; | |
| if [[ ${cur_tok_a} != ${cur_tok_b} ]]; then | |
| local suffix; | |
| for suffix in alpha beta pre rc "" p; | |
| do | |
| [[ ${cur_tok_a} == ${suffix} ]] && eshopts_pop && return 1; | |
| [[ ${cur_tok_b} == ${suffix} ]] && eshopts_pop && return 3; | |
| done; | |
| else | |
| if [[ -z ${cur_tok_a} && -z ${cur_tok_b} ]]; then | |
| break; | |
| else | |
| ((num_part_a < num_part_b)) && eshopts_pop && return 1; | |
| ((num_part_a > num_part_b)) && eshopts_pop && return 3; | |
| fi; | |
| fi; | |
| done; | |
| [[ ${parts_a[cur_idx_a]} == - ]] && ((cur_idx_a++)); | |
| [[ ${parts_b[cur_idx_b]} == - ]] && ((cur_idx_b++)); | |
| if [[ -n ${parts_a[cur_idx_a]/r+([0-9])} || -n ${parts_b[cur_idx_b]/r+([0-9])} ]]; then | |
| die "versionator compare bug [revisions, ${ver_a}, ${ver_b}]"; | |
| fi; | |
| num_part_a=${parts_a[cur_idx_a]#r}; | |
| num_part_a=${num_part_a##+(0)}; | |
| : ${num_part_a:=0}; | |
| num_part_b=${parts_b[cur_idx_b]#r}; | |
| num_part_b=${num_part_b##+(0)}; | |
| : ${num_part_b:=0}; | |
| ((num_part_a < num_part_b)) && eshopts_pop && return 1; | |
| ((num_part_a > num_part_b)) && eshopts_pop && return 3; | |
| eshopts_pop; | |
| return 2 | |
| } | |
| version_format_string () | |
| { | |
| local fstr=$1; | |
| shift; | |
| set -- $(get_version_components "$@"); | |
| eval echo "${fstr}" | |
| } | |
| version_is_at_least () | |
| { | |
| local want_s="$1" have_s="${2:-${PVR}}" r; | |
| version_compare "${want_s}" "${have_s}"; | |
| r=$?; | |
| case $r in | |
| 1 | 2) | |
| return 0 | |
| ;; | |
| 3) | |
| return 1 | |
| ;; | |
| *) | |
| die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]" | |
| ;; | |
| esac | |
| } | |
| version_sort () | |
| { | |
| eshopts_push -s extglob; | |
| local items=; | |
| local -i left=0; | |
| items=("$@"); | |
| while ((left < ${#items[@]})); do | |
| local -i lowest_idx=left; | |
| local -i idx=lowest_idx+1; | |
| while ((idx < ${#items[@]})); do | |
| version_compare "${items[lowest_idx]}" "${items[idx]}"; | |
| [[ $? -eq 3 ]] && lowest_idx=idx; | |
| idx+=1; | |
| done; | |
| local tmp=${items[lowest_idx]}; | |
| items[lowest_idx]=${items[left]}; | |
| items[left]=${tmp}; | |
| left+=1; | |
| done; | |
| echo ${items[@]}; | |
| eshopts_pop | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment