Created
June 13, 2012 01:08
-
-
Save rking/2921162 to your computer and use it in GitHub Desktop.
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
+ cat cmd-output | |
% emerge xmonad-contrib ~@tsiyon | |
Password: | |
Calculating dependencies... done! | |
>>> Verifying ebuild manifests | |
>>> Emerging (1 of 1) x11-wm/xmonad-contrib-0.9 | |
* xmonad-contrib-0.9.tar.gz RMD160 SHA1 SHA256 size ;-) ... [ ok ] | |
>>> Unpacking source... | |
>>> Unpacking xmonad-contrib-0.9.tar.gz to /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work | |
>>> Source unpacked in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work | |
>>> Preparing source in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9 ... | |
>>> Source prepared. | |
>>> Configuring source in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9 ... | |
* Using cabal-1.10.2.0. | |
/usr/bin/ghc -package Cabal-1.10.2.0 --make /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9/Setup.lhs -o setup | |
[1 of 1] Compiling Main ( /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9/Setup.lhs, /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9/Setup.o ) | |
Linking setup ... | |
./setup configure --ghc --prefix=/usr --with-compiler=/usr/bin/ghc --with-hc-pkg=/usr/bin/ghc-pkg --prefix=/usr --libdir=/usr/lib64 --libsubdir=xmonad-contrib-0.9/ghc-6.12.3 --datadir=/usr/share/ --datasubdir=xmonad-contrib-0.9/ghc-6.12.3 --ghc-option=-optl-Wl,-O1 --ghc-option=-optl-Wl,--as-needed --disable-executable-stripping --docdir=/usr/share/doc/xmonad-contrib-0.9 --verbose | |
Configuring xmonad-contrib-0.9... | |
Flags chosen: testing=False, use_xft=False, small_base=True | |
Dependency X11 >=1.4.6.1: using X11-1.4.6.1 | |
Dependency base ==3.*: using base-3.0.3.2 | |
Dependency containers -any: using containers-0.3.0.0 | |
Dependency directory -any: using directory-1.0.1.1 | |
Dependency mtl -any: using mtl-2.0.1.0 | |
Dependency old-locale -any: using old-locale-1.0.0.2 | |
Dependency old-time -any: using old-time-1.0.0.5 | |
Dependency process -any: using process-1.0.1.3 | |
Dependency random -any: using random-1.0.1.1 | |
Dependency unix -any: using unix-2.4.0.2 | |
Dependency utf8-string -any: using utf8-string-0.3.7 | |
Dependency xmonad >=0.9 && <1: using xmonad-0.9 | |
Warning: This package indirectly depends on multiple versions of the same | |
package. This is highly likely to cause a compile failure. | |
package base-3.0.3.2 requires syb-0.1.0.2 | |
package X11-1.4.6.1 requires syb-0.3.6 | |
Using Cabal-1.10.2.0 compiled by ghc-6.12 | |
Using compiler: ghc-6.12.3 | |
Using install prefix: /usr | |
Binaries installed in: /usr/bin | |
Libraries installed in: /usr/lib64/xmonad-contrib-0.9/ghc-6.12.3 | |
Private binaries installed in: /usr/libexec | |
Data files installed in: /usr/share/xmonad-contrib-0.9/ghc-6.12.3 | |
Documentation installed in: /usr/share/doc/xmonad-contrib-0.9 | |
Using alex version 2.3.5 found on system at: /usr/bin/alex | |
Using ar found on system at: /usr/bin/ar | |
Using c2hs version 0.16.3 found on system at: /usr/bin/c2hs | |
No cpphs found | |
No ffihugs found | |
Using gcc version 4.5.3 found on system at: /usr/bin/gcc | |
Using ghc version 6.12.3 given by user at: /usr/bin/ghc | |
Using ghc-pkg version 6.12.3 given by user at: /usr/bin/ghc-pkg | |
No greencard found | |
No haddock found | |
Using happy version 1.18.2 found on system at: /usr/bin/happy | |
No hmake found | |
Using hsc2hs version 0.67 found on system at: /usr/bin/hsc2hs | |
No hscolour found | |
No hugs found | |
No jhc found | |
Using ld found on system at: /usr/bin/ld | |
No lhc found | |
No lhc-pkg found | |
No nhc98 found | |
Using pkg-config version 0.26 found on system at: /usr/bin/pkg-config | |
Using ranlib found on system at: /usr/bin/ranlib | |
Using strip found on system at: /usr/bin/strip | |
Using tar found on system at: /bin/tar | |
No uhc found | |
>>> Source configured. | |
>>> Compiling source in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9 ... | |
./setup build | |
Preprocessing library xmonad-contrib-0.9... | |
Building xmonad-contrib-0.9... | |
[ 1 of 180] Compiling XMonad.Util.Replace ( XMonad/Util/Replace.hs, dist/build/XMonad/Util/Replace.o ) | |
XMonad/Util/Replace.hs:1:0: | |
Warning: Module `Prelude' is deprecated: | |
You are using the old package `base' version 3.x. | |
Future GHC versions will not support base version 3.x. You | |
should update your code to use the new base version 4.x. | |
[ 2 of 180] Compiling XMonad.Util.CustomKeys ( XMonad/Util/CustomKeys.hs, dist/build/XMonad/Util/CustomKeys.o ) | |
XMonad/Util/CustomKeys.hs:80:23: | |
Not in scope: data constructor `Reader' | |
* ERROR: x11-wm/xmonad-contrib-0.9 failed (compile phase): | |
* setup build failed | |
* | |
* Call stack: | |
* ebuild.sh, line 85: Called src_compile | |
* environment, line 2549: Called cabal_src_compile | |
* environment, line 561: Called cabal-build | |
* environment, line 419: Called die | |
* The specific snippet of code: | |
* ./setup "$@" || die "setup build failed" | |
* | |
* If you need support, post the output of 'emerge --info =x11-wm/xmonad-contrib-0.9', | |
* the complete build log and the output of 'emerge -pqv =x11-wm/xmonad-contrib-0.9'. | |
* The complete build log is located at '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/build.log'. | |
* The ebuild environment file is located at '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/environment'. | |
* S: '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9' | |
>>> Failed to emerge x11-wm/xmonad-contrib-0.9, Log file: | |
>>> '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/build.log' | |
* Messages for package x11-wm/xmonad-contrib-0.9: | |
* ERROR: x11-wm/xmonad-contrib-0.9 failed (compile phase): | |
* setup build failed | |
* | |
* Call stack: | |
* ebuild.sh, line 85: Called src_compile | |
* environment, line 2549: Called cabal_src_compile | |
* environment, line 561: Called cabal-build | |
* environment, line 419: Called die | |
* The specific snippet of code: | |
* ./setup "$@" || die "setup build failed" | |
* | |
* If you need support, post the output of 'emerge --info =x11-wm/xmonad-contrib-0.9', | |
* the complete build log and the output of 'emerge -pqv =x11-wm/xmonad-contrib-0.9'. | |
* The complete build log is located at '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/build.log'. | |
* The ebuild environment file is located at '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/environment'. | |
* S: '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9' | |
+ emerge --info =x11-wm/xmonad-contrib-0.9 | |
Portage 2.1.10.49 (default/linux/amd64/10.0/desktop, gcc-4.5.3, glibc-2.14.1-r3, 3.3.2-gentoo x86_64) | |
================================================================= | |
System Settings | |
================================================================= | |
System uname: Linux-3.3.2-gentoo-x86_64-Intel-R-_Core-TM-2_Duo_CPU_E8400_@_3.00GHz-with-gentoo-2.1 | |
Timestamp of tree: Tue, 12 Jun 2012 10:00:01 +0000 | |
ccache version 3.1.6 [disabled] | |
app-shells/bash: 4.2_p20 | |
dev-java/java-config: 2.1.11-r3 | |
dev-lang/python: 2.7.3-r1, 3.2.3 | |
dev-util/ccache: 3.1.6 | |
dev-util/cmake: 2.8.6-r4 | |
dev-util/pkgconfig: 0.26 | |
sys-apps/baselayout: 2.1-r1 | |
sys-apps/openrc: 0.9.8.4 | |
sys-apps/sandbox: 2.5 | |
sys-devel/autoconf: 2.13, 2.68 | |
sys-devel/automake: 1.9.6-r3, 1.11.1 | |
sys-devel/binutils: 2.21.1-r1 | |
sys-devel/gcc: 4.5.3-r2 | |
sys-devel/gcc-config: 1.5-r2 | |
sys-devel/libtool: 2.4-r1 | |
sys-devel/make: 3.82-r1 | |
sys-kernel/linux-headers: 3.1 (virtual/os-headers) | |
sys-libs/glibc: 2.14.1-r3 | |
Repositories: gentoo | |
ACCEPT_KEYWORDS="amd64" | |
ACCEPT_LICENSE="* -@EULA" | |
CBUILD="x86_64-pc-linux-gnu" | |
CFLAGS="-I/home/rking/local/usr/include -I/home/rking/local/include -I/home/rking/local/usr/include -I/home/rking/local/include -I/home/rking/local/usr/include -I/home/rking/local/include " | |
CHOST="x86_64-pc-linux-gnu" | |
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt /usr/share/maven-bin-2.2/conf /var/lib/hsqldb" | |
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/env.d/java/ /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo" | |
CXXFLAGS="-march=core2 -fomit-frame-pointer -pipe" | |
DISTDIR="/usr/portage/distfiles" | |
FEATURES="assume-digests binpkg-logs candy distlocks ebuild-locks fixlafiles news parallel-fetch protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch" | |
FFLAGS="" | |
GENTOO_MIRRORS="http://mirror.datapipe.net/gentoo ftp://mirror.datapipe.net/gentoo http://gentoo.mirrors.easynews.com/linux/gentoo/ http://chi-10g-1-mirror.fastsoft.net/pub/linux/gentoo/gentoo-distfiles/ ftp://chi-10g-1-mirror.fastsoft.net/pub/linux/gentoo/gentoo-distfiles/ http://www.gtlib.gatech.edu/pub/gentoo rsync://rsync.gtlib.gatech.edu/gentoo ftp://ftp.gtlib.gatech.edu/pub/gentoo http://gentoo.mirrors.hoobly.com/ ftp://ftp.ussg.iu.edu/pub/linux/gentoo http://lug.mtu.edu/gentoo/ ftp://lug.mtu.edu/gentoo/ ftp://gentoo.netnitco.net/pub/mirrors/gentoo/source/ http://gentoo.netnitco.net http://gentoo.osuosl.org/ http://gentoo.mirrors.pair.com/ ftp://gentoo.mirrors.pair.com/ rsync://mirrors.rit.edu/gentoo/ ftp://mirrors.rit.edu/gentoo/ http://mirrors.rit.edu/gentoo/ ftp://mirror.iawnet.sandia.gov/pub/gentoo/ http://mirror.iawnet.sandia.gov/gentoo/ ftp://gentoo.llarian.net/pub/gentoo http://gentoo.llarian.net/ ftp://gentoo.mirrors.tds.net/gentoo rsync://gentoo.mirrors.tds.net/gentoo http://gentoo.mirrors.tds.net/gentoo http://ftp.ucsb.edu/pub/mirrors/linux/gentoo/ ftp://ftp.ucsb.edu/pub/mirrors/linux/gentoo/ ftp://ftp.lug.udel.edu/pub/gentoo/ http://mirror.lug.udel.edu/pub/gentoo/ http://gentoo.cites.uiuc.edu/pub/gentoo/ ftp://gentoo.cites.uiuc.edu/pub/gentoo/ rsync://gentoo.cs.uni.edu/gentoo-distfiles http://gentoo.cs.uni.edu/ http://mirror.usu.edu/mirrors/gentoo/ ftp://ftp.wallawalla.edu/pub/mirrors/ftp.gentoo.org" | |
LANG="en_US.utf8" | |
LC_ALL="en_US.utf8" | |
LDFLAGS=" -L/home/rking/lib -L/home/rking/local/lib -L/home/rking/lib -L/home/rking/local/lib -L/home/rking/lib -L/home/rking/local/lib" | |
MAKEOPTS="-j3" | |
PKGDIR="/usr/portage/packages" | |
PORTAGE_CONFIGROOT="/" | |
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages" | |
PORTAGE_TMPDIR="/var/tmp" | |
PORTDIR="/usr/portage" | |
PORTDIR_OVERLAY="" | |
SYNC="rsync://rsync.gentoo.org/gentoo-portage" | |
USE="X a52 aac acl acpi alsa amd64 berkdb bluetooth branding bzip2 cairo cdda cdr cli consolekit cracklib crypt cscope cups cxx dbus dri dts dvd dvdr emboss encode exif fam firefox flac fortran gdbm gif gpm gtk hp hpcups hpijs iconv idn ipv6 jack javascript jpeg lcms ldap libnotify lock mad mmx mng modules mp3 mp4 mpeg mudflap multilib ncurses nls nptl ogg opengl openmp openssl pam pango pcre pdf png policykit ppds pppd qt3support readline ruby scanner sdl session spell sse sse2 sse3 ssl ssse3 startup-notification svg symlink tcpd thunar tiff truetype udev udisks unicode upower usb vorbis vpx wxwidgets x264 xcb xml xorg xulrunner xv xvid zlib" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache 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" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump" CAMERAS="ptp2" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" ELIBC="glibc" 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" INPUT_DEVICES="keyboard mouse evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" PHP_TARGETS="php5-3" PYTHON_TARGETS="python3_2 python2_7" RUBY_TARGETS="ruby18 ruby19" USERLAND="GNU" VIDEO_CARDS="nvidia" 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" | |
Unset: CPPFLAGS, CTARGET, EMERGE_DEFAULT_OPTS, INSTALL_MASK, LINGUAS, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, USE_PYTHON | |
+ emerge -pqv =x11-wm/xmonad-contrib-0.9 | |
[ebuild N ] x11-wm/xmonad-contrib-0.9 USE="-doc -profile" | |
+ cat /var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/build.log | |
[32;01m * [39;49;00mPackage: x11-wm/xmonad-contrib-0.9 | |
[32;01m * [39;49;00mRepository: gentoo | |
[32;01m * [39;49;00mMaintainer: [email protected] | |
[32;01m * [39;49;00mUSE: amd64 elibc_glibc kernel_linux multilib userland_GNU | |
[32;01m * [39;49;00mFEATURES: sandbox | |
>>> Unpacking source... | |
>>> Unpacking xmonad-contrib-0.9.tar.gz to /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work | |
>>> Source unpacked in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work | |
>>> Preparing source in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9 ... | |
>>> Source prepared. | |
>>> Configuring source in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9 ... | |
[32;01m*[0m Using cabal-1.10.2.0. | |
/usr/bin/ghc -package Cabal-1.10.2.0 --make /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9/Setup.lhs -o setup | |
[1 of 1] Compiling Main ( /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9/Setup.lhs, /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9/Setup.o ) | |
Linking setup ... | |
./setup configure --ghc --prefix=/usr --with-compiler=/usr/bin/ghc --with-hc-pkg=/usr/bin/ghc-pkg --prefix=/usr --libdir=/usr/lib64 --libsubdir=xmonad-contrib-0.9/ghc-6.12.3 --datadir=/usr/share/ --datasubdir=xmonad-contrib-0.9/ghc-6.12.3 --ghc-option=-optl-Wl,-O1 --ghc-option=-optl-Wl,--as-needed --disable-executable-stripping --docdir=/usr/share/doc/xmonad-contrib-0.9 --verbose | |
Configuring xmonad-contrib-0.9... | |
Flags chosen: testing=False, use_xft=False, small_base=True | |
Dependency X11 >=1.4.6.1: using X11-1.4.6.1 | |
Dependency base ==3.*: using base-3.0.3.2 | |
Dependency containers -any: using containers-0.3.0.0 | |
Dependency directory -any: using directory-1.0.1.1 | |
Dependency mtl -any: using mtl-2.0.1.0 | |
Dependency old-locale -any: using old-locale-1.0.0.2 | |
Dependency old-time -any: using old-time-1.0.0.5 | |
Dependency process -any: using process-1.0.1.3 | |
Dependency random -any: using random-1.0.1.1 | |
Dependency unix -any: using unix-2.4.0.2 | |
Dependency utf8-string -any: using utf8-string-0.3.7 | |
Dependency xmonad >=0.9 && <1: using xmonad-0.9 | |
Warning: This package indirectly depends on multiple versions of the same | |
package. This is highly likely to cause a compile failure. | |
package base-3.0.3.2 requires syb-0.1.0.2 | |
package X11-1.4.6.1 requires syb-0.3.6 | |
Using Cabal-1.10.2.0 compiled by ghc-6.12 | |
Using compiler: ghc-6.12.3 | |
Using install prefix: /usr | |
Binaries installed in: /usr/bin | |
Libraries installed in: /usr/lib64/xmonad-contrib-0.9/ghc-6.12.3 | |
Private binaries installed in: /usr/libexec | |
Data files installed in: /usr/share/xmonad-contrib-0.9/ghc-6.12.3 | |
Documentation installed in: /usr/share/doc/xmonad-contrib-0.9 | |
Using alex version 2.3.5 found on system at: /usr/bin/alex | |
Using ar found on system at: /usr/bin/ar | |
Using c2hs version 0.16.3 found on system at: /usr/bin/c2hs | |
No cpphs found | |
No ffihugs found | |
Using gcc version 4.5.3 found on system at: /usr/bin/gcc | |
Using ghc version 6.12.3 given by user at: /usr/bin/ghc | |
Using ghc-pkg version 6.12.3 given by user at: /usr/bin/ghc-pkg | |
No greencard found | |
No haddock found | |
Using happy version 1.18.2 found on system at: /usr/bin/happy | |
No hmake found | |
Using hsc2hs version 0.67 found on system at: /usr/bin/hsc2hs | |
No hscolour found | |
No hugs found | |
No jhc found | |
Using ld found on system at: /usr/bin/ld | |
No lhc found | |
No lhc-pkg found | |
No nhc98 found | |
Using pkg-config version 0.26 found on system at: /usr/bin/pkg-config | |
Using ranlib found on system at: /usr/bin/ranlib | |
Using strip found on system at: /usr/bin/strip | |
Using tar found on system at: /bin/tar | |
No uhc found | |
>>> Source configured. | |
>>> Compiling source in /var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9 ... | |
./setup build | |
Preprocessing library xmonad-contrib-0.9... | |
Building xmonad-contrib-0.9... | |
[ 1 of 180] Compiling XMonad.Util.Replace ( XMonad/Util/Replace.hs, dist/build/XMonad/Util/Replace.o ) | |
XMonad/Util/Replace.hs:1:0: | |
Warning: Module `Prelude' is deprecated: | |
You are using the old package `base' version 3.x. | |
Future GHC versions will not support base version 3.x. You | |
should update your code to use the new base version 4.x. | |
[ 2 of 180] Compiling XMonad.Util.CustomKeys ( XMonad/Util/CustomKeys.hs, dist/build/XMonad/Util/CustomKeys.o ) | |
XMonad/Util/CustomKeys.hs:80:23: | |
Not in scope: data constructor `Reader' | |
[31;01m*[0m ERROR: x11-wm/xmonad-contrib-0.9 failed (compile phase): | |
[31;01m*[0m setup build failed | |
[31;01m*[0m | |
[31;01m*[0m Call stack: | |
[31;01m*[0m ebuild.sh, line 85: Called src_compile | |
[31;01m*[0m environment, line 2549: Called cabal_src_compile | |
[31;01m*[0m environment, line 561: Called cabal-build | |
[31;01m*[0m environment, line 419: Called die | |
[31;01m*[0m The specific snippet of code: | |
[31;01m*[0m ./setup "$@" || die "setup build failed" | |
[31;01m*[0m | |
[31;01m*[0m If you need support, post the output of 'emerge --info =x11-wm/xmonad-contrib-0.9', | |
[31;01m*[0m the complete build log and the output of 'emerge -pqv =x11-wm/xmonad-contrib-0.9'. | |
[31;01m*[0m The complete build log is located at '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/build.log'. | |
[31;01m*[0m The ebuild environment file is located at '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/environment'. | |
[31;01m*[0m S: '/var/tmp/portage/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9' | |
+ cat /var/tmp/portage/x11-wm/xmonad-contrib-0.9/temp/environment | |
declare -x ABI="amd64" | |
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="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 -x BOOTSTRAP_USE="cxx unicode multilib" | |
declare -- CABAL_EXTRA_BUILD_FLAGS="" | |
declare -- CABAL_EXTRA_CONFIGURE_FLAGS="" | |
declare -- CABAL_FEATURES="lib profile haddock" | |
declare -- CABAL_HAS_LIBRARIES="yes" | |
declare -- CABAL_MIN_VERSION="1.1.4" | |
declare -- CABAL_USE_HADDOCK="yes" | |
declare -- CABAL_USE_PROFILE="yes" | |
declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump" | |
declare -x CAMERAS="ptp2" | |
declare -x CBUILD="x86_64-pc-linux-gnu" | |
declare -x CFLAGS="-march=core2 -fomit-frame-pointer -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-gnu" | |
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 CTARGET_default="x86_64-pc-linux-gnu" | |
declare -x CXXFLAGS="-march=core2 -fomit-frame-pointer -pipe" | |
declare -x DEFAULT_ABI="amd64" | |
declare -x DEFINED_PHASES=" compile configure install postinst prerm setup test" | |
declare DEPEND=">=dev-lang/ghc-6.6.1 | |
dev-haskell/mtl[profile?] | |
>=dev-haskell/x11-1.4.6.1[profile?] | |
dev-haskell/utf8-string[profile?] | |
~x11-wm/xmonad-0.9[profile?] | |
>=dev-haskell/cabal-1.2.1 doc? ( dev-haskell/haddock ) >=dev-haskell/cabal-1.1.4" | |
declare DESCRIPTION="Third party extensions for xmonad" | |
declare -x DESTTREE="/usr" | |
declare -x DIROPTIONS="-m0755" | |
declare -x EAPI="3" | |
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/x11-wm/xmonad-contrib-0.9/work/patch" | |
declare -- EPATCH_SUFFIX="patch.bz2" | |
declare -x EXEOPTIONS="-m0755" | |
declare -x FCFLAGS="" | |
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="" | |
declare -x FLTK_DOCDIR="/usr/share/doc/fltk-1.3.0/html" | |
declare -x GCC_SPECS="" | |
declare -x GDK_USE_XFT="1" | |
declare -- GHC_BOOTSTRAP_FLAGS="" | |
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 -x GUILE_LOAD_PATH="/usr/share/guile/1.8" | |
declare -- HASKELL_CABAL_EXPF="pkg_setup src_compile src_test src_install src_configure" | |
declare -x HG="/usr/bin/hg" | |
declare HOMEPAGE="http://xmonad.org/" | |
declare -x INHERITED=" multilib toolchain-funcs user eutils versionator ghc-package haskell-cabal" | |
declare -x INPUT_DEVICES="keyboard mouse evdev" | |
declare -x INSDESTTREE="" | |
declare -x INSOPTIONS="-m0644" | |
declare IUSE=" doc profile" | |
declare -x KERNEL="linux" | |
declare -x KERNEL_ABI="amd64" | |
declare -x KEYWORDS="amd64 ~sparc x86" | |
declare -x KV="3.3.2-gentoo" | |
declare -x LADSPA_PATH="/usr/lib64/ladspa" | |
declare -x LANG="en_US.utf8" | |
declare -x LCD_DEVICES="" | |
declare -x LC_ALL="en_US.utf8" | |
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="BSD" | |
declare -x MAIL="/var/mail/root" | |
declare -x MAKEOPTS="-j3" | |
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 -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="nvidia" | |
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.5.3" | |
declare PDEPEND="" | |
declare -x PHP_TARGETS="" | |
declare -x PKG_CONFIG_PATH="/usr/lib64/pkgconfig" | |
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/xmonad-contrib-0.9/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 KERNEL USERLAND" | |
declare -x PROPERTIES="" | |
declare -x PROVIDE="" | |
declare -x PYTHONDONTWRITEBYTECODE="1" | |
declare -x PYTHON_TARGETS="python3_2" | |
declare -x RDEPEND=">=dev-lang/ghc-6.6.1 | |
dev-haskell/mtl[profile?] | |
>=dev-haskell/x11-1.4.6.1[profile?] | |
dev-haskell/utf8-string[profile?] | |
~x11-wm/xmonad-0.9[profile?] dev-lang/ghc" | |
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/x11-wm/xmonad-contrib-0.9/work/xmonad-contrib-0.9" | |
declare -x SANDBOX_DEBUG="0" | |
declare -x SANDBOX_DENY="" | |
declare -x SANDBOX_PID="18529" | |
declare -x SANDBOX_PREDICT="/var/tmp/portage/x11-wm/xmonad-contrib-0.9/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/x11-wm/xmonad-contrib-0.9/homedir/.bash_history" | |
declare -x SLOT="0" | |
declare SRC_URI="http://hackage.haskell.org/packages/archive/xmonad-contrib/0.9/xmonad-contrib-0.9.tar.gz" | |
declare -x SUDO_COMMAND="/usr/bin/emerge xmonad-contrib" | |
declare -x SUDO_GID="1000" | |
declare -x SUDO_UID="1000" | |
declare -x SUDO_USER="rking" | |
declare -x SYMLINK_LIB="yes" | |
declare -x TINYSCHEMEINIT="/usr/share/tinyscheme/init.scm" | |
declare -x USE="amd64 elibc_glibc kernel_linux multilib userland_GNU" | |
declare -x USERLAND="GNU" | |
declare -x USERNAME="root" | |
declare -x VIDEO_CARDS="" | |
declare -x XDG_CONFIG_DIRS="/etc/xdg" | |
declare -x XDG_DATA_DIRS="/usr/local/share:/usr/share:/usr/share/gdm" | |
declare -x XSESSION="Xfce4" | |
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 -- _CABAL_VERSION_CACHE="" | |
declare -x _E_DOCDESTTREE_="" | |
declare -x _E_EXEDESTTREE_="" | |
declare -- _GHC_LIBDIR_CACHE="" | |
declare -- _GHC_VERSION_CACHE="" | |
declare -a __ESTACK_eshopts__='()' | |
declare -- ___ECLASS_ONCE_EUTILS="recur -_+^+_- spank" | |
declare -- ___ECLASS_ONCE_MULTILIB="recur -_+^+_- spank" | |
declare -- ___ECLASS_ONCE_TOOLCHAIN_FUNCS="recur -_+^+_- spank" | |
declare -- ___ECLASS_ONCE_USER="recur -_+^+_- spank" | |
declare -- ___ECLASS_ONCE_VERSIONATOR="recur -_+^+_- spank" | |
declare -- cabalconf=" --ghc-option=-optl-Wl,-O1 --ghc-option=-optl-Wl,--as-needed --disable-executable-stripping --docdir=/usr/share/doc/xmonad-contrib-0.9 --verbose" | |
declare -- feature="haddock" | |
declare -- phase_func | |
_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 | |
} | |
_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 | |
} | |
_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}" | |
} | |
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" ]] | |
} | |
cabal-bootstrap () | |
{ | |
local setupmodule; | |
local cabalpackage; | |
if [[ -f "${S}/Setup.lhs" ]]; then | |
setupmodule="${S}/Setup.lhs"; | |
else | |
if [[ -f "${S}/Setup.hs" ]]; then | |
setupmodule="${S}/Setup.hs"; | |
else | |
die "No Setup.lhs or Setup.hs found"; | |
fi; | |
fi; | |
if [[ -z "${CABAL_BOOTSTRAP}" && -z "${CABAL_FROM_GHC}" ]] && ! ghc-sanecabal "${CABAL_MIN_VERSION}"; then | |
eerror "The package dev-haskell/cabal is not correctly installed for"; | |
eerror "the currently active version of ghc ($(ghc-version)). Please"; | |
eerror "run haskell-updater or re-build dev-haskell/cabal."; | |
die "cabal is not correctly installed"; | |
fi; | |
cabalpackage=Cabal-$(cabal-version); | |
einfo "Using cabal-$(cabal-version)."; | |
function make_setup () | |
{ | |
set -- -package "${cabalpackage}" --make "${setupmodule}" ${GHC_BOOTSTRAP_FLAGS} "$@" -o setup; | |
echo $(ghc-getghc) ${HCFLAGS} "$@"; | |
$(ghc-getghc) "$@" | |
}; | |
if $(ghc-supports-shared-libraries); then | |
make_setup "$@" || die "compiling ${setupmodule} failed"; | |
else | |
make_setup "$@" || die "compiling ${setupmodule} failed"; | |
fi | |
} | |
cabal-build () | |
{ | |
unset LANG LC_ALL LC_MESSAGES; | |
set -- build ${CABAL_EXTRA_BUILD_FLAGS} "$@"; | |
echo ./setup "$@"; | |
./setup "$@" || die "setup build failed" | |
} | |
cabal-configure () | |
{ | |
has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=; | |
if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then | |
cabalconf="${cabalconf} --with-haddock=${EPREFIX}/usr/bin/haddock"; | |
fi; | |
if [[ -n "${CABAL_USE_PROFILE}" ]] && use profile; then | |
cabalconf="${cabalconf} --enable-library-profiling"; | |
fi; | |
if [[ -n "${CABAL_USE_ALEX}" ]]; then | |
cabalconf="${cabalconf} --with-alex=${EPREFIX}/usr/bin/alex"; | |
fi; | |
if [[ -n "${CABAL_USE_HAPPY}" ]]; then | |
cabalconf="${cabalconf} --with-happy=${EPREFIX}/usr/bin/happy"; | |
fi; | |
if [[ -n "${CABAL_USE_C2HS}" ]]; then | |
cabalconf="${cabalconf} --with-c2hs=${EPREFIX}/usr/bin/c2hs"; | |
fi; | |
if [[ -n "${CABAL_USE_CPPHS}" ]]; then | |
cabalconf="${cabalconf} --with-cpphs=${EPREFIX}/usr/bin/cpphs"; | |
fi; | |
if [[ -n "${CABAL_TEST_SUITE}" ]]; then | |
cabalconf="${cabalconf} $(use_enable test tests)"; | |
fi; | |
local option; | |
for option in ${HCFLAGS}; | |
do | |
cabalconf+=" --ghc-option=$option"; | |
done; | |
if use ppc64; then | |
cabalconf="${cabalconf} --disable-library-for-ghci"; | |
fi; | |
local flag; | |
for flag in $LDFLAGS; | |
do | |
cabalconf="${cabalconf} --ghc-option=-optl$flag"; | |
done; | |
cabalconf="${cabalconf} --disable-executable-stripping"; | |
cabalconf="${cabalconf} --docdir=${EPREFIX}/usr/share/doc/${PF}"; | |
cabalconf="${cabalconf} --verbose"; | |
[[ ${CATEGORY}/${PN} == "dev-haskell/cabal" ]] && $(ghc-supports-shared-libraries) && cabalconf="${cabalconf} --enable-shared"; | |
set -- configure --ghc --prefix="${EPREFIX}"/usr --with-compiler="$(ghc-getghc)" --with-hc-pkg="$(ghc-getghcpkg)" --prefix="${EPREFIX}"/usr --libdir="${EPREFIX}"/usr/$(get_libdir) --libsubdir=${P}/ghc-$(ghc-version) --datadir="${EPREFIX}"/usr/share/ --datasubdir=${P}/ghc-$(ghc-version) ${cabalconf} ${CABAL_CONFIGURE_FLAGS} ${CABAL_EXTRA_CONFIGURE_FLAGS} "$@"; | |
echo ./setup "$@"; | |
./setup "$@" || die "setup configure failed" | |
} | |
cabal-copy () | |
{ | |
has "${EAPI:-0}" 0 1 2 && ! use prefix && ED=${D}; | |
set -- copy --destdir="${D}" "$@"; | |
echo ./setup "$@"; | |
./setup "$@" || die "setup copy failed"; | |
rmdir "${ED}/usr/bin" 2> /dev/null | |
} | |
cabal-haddock () | |
{ | |
set -- haddock "$@"; | |
echo ./setup "$@"; | |
./setup "$@" || die "setup haddock failed" | |
} | |
cabal-hscolour () | |
{ | |
set -- hscolour "$@"; | |
echo ./setup "$@"; | |
./setup "$@" || die "setup hscolour failed" | |
} | |
cabal-hscolour-haddock () | |
{ | |
set -- haddock --hyperlink-source; | |
echo ./setup "$@"; | |
./setup "$@" --hyperlink-source || die "setup haddock --hyperlink-source failed" | |
} | |
cabal-is-dummy-lib () | |
{ | |
for version in ${CABAL_CORE_LIB_GHC_PV[*]}; | |
do | |
[[ "$(ghc-version)" == "$version" ]] && return 0; | |
done; | |
return 1 | |
} | |
cabal-mksetup () | |
{ | |
local setupdir; | |
if [[ -n $1 ]]; then | |
setupdir=$1; | |
else | |
setupdir=${S}; | |
fi; | |
rm -f "${setupdir}"/Setup.{lhs,hs}; | |
echo 'import Distribution.Simple; main = defaultMainWithHooks defaultUserHooks' > $setupdir/Setup.hs || die "failed to create default Setup.hs" | |
} | |
cabal-pkg () | |
{ | |
if [[ -n ${CABAL_HAS_LIBRARIES} ]]; then | |
./setup register --gen-pkg-config="${T}/${P}.conf"; | |
ghc-setup-pkg "${T}/${P}.conf"; | |
ghc-install-pkg; | |
fi | |
} | |
cabal-version () | |
{ | |
if [[ -z "${_CABAL_VERSION_CACHE}" ]]; then | |
if [[ -n "${CABAL_BOOTSTRAP}" ]]; then | |
_CABAL_VERSION_CACHE="${PV}"; | |
else | |
if [[ -n "${CABAL_FROM_GHC}" ]]; then | |
local cabal_package=$(echo "$(ghc-libdir)"/Cabal-*); | |
_CABAL_VERSION_CACHE="${cabal_package/*Cabal-/}"; | |
else | |
_CABAL_VERSION_CACHE="$(ghc-extractportageversion dev-haskell/cabal)"; | |
fi; | |
fi; | |
fi; | |
echo "${_CABAL_VERSION_CACHE}" | |
} | |
cabal_flag () | |
{ | |
if [[ -z "$1" ]]; then | |
echo "!!! cabal_flag() called without a parameter." 1>&2; | |
echo "!!! cabal_flag() <USEFLAG> [<cabal_flagname>]" 1>&2; | |
return 1; | |
fi; | |
local UWORD=${2:-$1}; | |
if use "$1"; then | |
echo "--flags=${UWORD}"; | |
else | |
echo "--flags=-${UWORD}"; | |
fi; | |
return 0 | |
} | |
cabal_src_compile () | |
{ | |
if ! has "${EAPI:-0}" 0 1; then | |
local passed_flag; | |
for passed_flag in "$@"; | |
do | |
[[ ${passed_flag} == --flags=* ]] && eqawarn "QA Notice: Cabal option '${passed_flag}' has effect only in src_configure()"; | |
done; | |
fi; | |
cabal-is-dummy-lib && return; | |
has src_configure ${HASKELL_CABAL_EXPF} || haskell-cabal_src_configure "$@"; | |
cabal-build; | |
if [[ -n "${CABAL_USE_HADDOCK}" ]] && use doc; then | |
if [[ -n "${CABAL_USE_HSCOLOUR}" ]] && use hscolour; then | |
cabal-hscolour-haddock; | |
else | |
cabal-haddock; | |
fi; | |
else | |
if [[ -n "${CABAL_USE_HSCOLOUR}" ]] && use hscolour; then | |
cabal-hscolour; | |
fi; | |
fi | |
} | |
cabal_src_configure () | |
{ | |
haskell-cabal_src_configure "$@" | |
} | |
cabal_src_install () | |
{ | |
has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=; | |
if ! cabal-is-dummy-lib; then | |
cabal-copy; | |
cabal-pkg; | |
fi; | |
local ghc_confdir_with_prefix="$(ghc-confdir)"; | |
dodir ${ghc_confdir_with_prefix#${EPREFIX}}; | |
local conf_file="${D}/$(ghc-confdir)/$(ghc-localpkgconf)"; | |
[[ -e $conf_file ]] || echo '[]' > "$conf_file" || die | |
} | |
check_license () | |
{ | |
die "you no longer need this as portage supports ACCEPT_LICENSE itself" | |
} | |
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} ) | |
} | |
ebeep () | |
{ | |
ewarn "QA Notice: ebeep is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org" | |
} | |
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} | |
} | |
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}}; | |
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 () | |
{ | |
ewarn "QA Notice: epause is not defined in EAPI=${EAPI}, please file a bug at http://bugs.gentoo.org" | |
} | |
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 | |
} | |
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: $*" | |
} | |
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; | |
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 | |
;; | |
*-aix* | *-irix* | *64*-hpux* | *-interix* | *-winnt*) | |
if ${auto}; then | |
mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die; | |
tlib=$(readlink "${ED}"/${libdir}/${lib}); | |
tlib=${tlib##*/}; | |
if [[ -z ${tlib} ]]; then | |
tlib=${lib}; | |
else | |
rm -f "${ED}"/${libdir}/${lib}; | |
fi; | |
else | |
tlib=${lib}; | |
fi; | |
pushd "${ED}/usr/${libdir}" > /dev/null; | |
ln -snf "../../${libdir}/${tlib}" "${lib}"; | |
popd > /dev/null | |
;; | |
hppa*-hpux*) | |
if ${auto}; then | |
tlib=$(chatr "${ED}"/usr/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}'); | |
[[ -z ${tlib} ]] && tlib=${lib}; | |
tlib=${tlib##*/}; | |
mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die; | |
if [[ ${tlib} != ${lib}* ]]; then | |
mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die; | |
fi; | |
[[ ${tlib} != ${lib} ]] && rm -f "${ED}"/${libdir}/${lib}; | |
else | |
tlib=$(chatr "${ED}"/${libdir}/${lib} | sed -n '/internal name:/{n;s/^ *//;p;q}'); | |
[[ -z ${tlib} ]] && tlib=${lib}; | |
tlib=${tlib##*/}; | |
fi; | |
pushd "${ED}"/usr/${libdir} > /dev/null; | |
ln -snf "../../${libdir}/${tlib}" "${lib}"; | |
[[ ${tlib} != ${lib} ]] && ln -snf "../../${libdir}/${tlib}" "${tlib}"; | |
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_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 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; | |
local abi; | |
local dir; | |
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 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_major_version () | |
{ | |
local c=($(get_all_version_components "${1:-${PV}}")); | |
echo ${c[0]} | |
} | |
get_modname () | |
{ | |
local modname; | |
local ver=$1; | |
case ${CHOST} in | |
*-darwin*) | |
modname="bundle" | |
;; | |
*) | |
modname="so" | |
;; | |
esac; | |
echo ".${modname}" | |
} | |
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//[-._]/ } | |
} | |
ghc-bestcabalversion () | |
{ | |
local cabalversion="$(ghc-extractportageversion dev-haskell/cabal)"; | |
echo "Cabal-${cabalversion}" | |
} | |
ghc-confdir () | |
{ | |
echo "$(ghc-libdir)/gentoo" | |
} | |
ghc-elem () | |
{ | |
local i; | |
for i in $2; | |
do | |
[[ "$1" == "${i}" ]] && return 0; | |
done; | |
return 1 | |
} | |
ghc-extractportageversion () | |
{ | |
local pkg; | |
local version; | |
pkg="$(best_version $1)"; | |
version="${pkg#$1-}"; | |
version="${version%-r*}"; | |
version="${version%_pre*}"; | |
echo "${version}" | |
} | |
ghc-fixlibpath () | |
{ | |
sed -i "s|$1|$(ghc-libdir)|g" "${S}/$(ghc-localpkgconf)"; | |
if [[ -n "$2" ]]; then | |
sed -i "s|$2|$(ghc-libdir)/imports|g" "${S}/$(ghc-localpkgconf)"; | |
fi | |
} | |
ghc-getghc () | |
{ | |
type -P ghc | |
} | |
ghc-getghcpkg () | |
{ | |
type -P ghc-pkg | |
} | |
ghc-getghcpkgbin () | |
{ | |
echo '[]' > "${T}/empty.conf"; | |
echo "$(ghc-libdir)/ghc-pkg" "--global-conf=${T}/empty.conf" | |
} | |
ghc-install-pkg () | |
{ | |
mkdir -p "${D}/$(ghc-confdir)"; | |
cat "${S}/$(ghc-localpkgconf)" | sed "s|${D}||g" > "${D}/$(ghc-confdir)/$(ghc-localpkgconf)" | |
} | |
ghc-libdir () | |
{ | |
if [[ -z "${_GHC_LIBDIR_CACHE}" ]]; then | |
_GHC_LIBDIR_CACHE="$($(ghc-getghc) --print-libdir)"; | |
fi; | |
echo "${_GHC_LIBDIR_CACHE}" | |
} | |
ghc-listpkg () | |
{ | |
local ghcpkgcall; | |
local i; | |
local extra_flags; | |
if version_is_at_least '6.12.3' "$(ghc-version)"; then | |
extra_flags="${extra_flags} -v0"; | |
fi; | |
for i in $*; | |
do | |
echo $($(ghc-getghcpkg) list ${extra_flags} -f "${i}") | sed -e "s|^.*${i}:\([^:]*\).*$|\1|" -e "s|/.*$||" -e "s|,| |g" -e "s|[(){}]||g"; | |
done | |
} | |
ghc-localpkgconf () | |
{ | |
echo "${PF}.conf" | |
} | |
ghc-makeghcilib () | |
{ | |
local outfile; | |
outfile="$(dirname $1)/$(basename $1 | sed 's:^lib\?\(.*\)\.a$:\1.o:')"; | |
ld --relocatable --discard-all --output="${outfile}" --whole-archive "$1" | |
} | |
ghc-package-exists () | |
{ | |
$(ghc-getghcpkg) describe "$1" > /dev/null 2>&1 | |
} | |
ghc-package_pkg_postinst () | |
{ | |
ghc-register-pkg "$(ghc-localpkgconf)" | |
} | |
ghc-package_pkg_prerm () | |
{ | |
ghc-unregister-pkg "$(ghc-localpkgconf)" | |
} | |
ghc-register-pkg () | |
{ | |
local localpkgconf="$(ghc-confdir)/$1"; | |
if [[ -f "${localpkgconf}" ]]; then | |
for pkg in $(ghc-listpkg "${localpkgconf}"); | |
do | |
ebegin "Registering ${pkg} "; | |
$(ghc-getghcpkgbin) -f "${localpkgconf}" describe "${pkg}" | $(ghc-getghcpkg) update - --force > /dev/null; | |
eend $?; | |
done; | |
fi | |
} | |
ghc-reregister () | |
{ | |
has "${EAPI:-0}" 0 1 2 && ! use prefix && EPREFIX=; | |
einfo "Re-adding packages (may cause several harmless warnings) ..."; | |
PATH="${EPREFIX}/usr/bin:${PATH}" CONFDIR="$(ghc-confdir)"; | |
if [ -d "${CONFDIR}" ]; then | |
pushd "${CONFDIR}" > /dev/null; | |
for conf in *.conf; | |
do | |
PATH="${EPREFIX}/usr/bin:${PATH}" ghc-register-pkg "${conf}"; | |
done; | |
popd > /dev/null; | |
fi | |
} | |
ghc-reverse () | |
{ | |
local result; | |
local i; | |
for i in $1; | |
do | |
result="${i} ${result}"; | |
done; | |
echo "${result}" | |
} | |
ghc-sanecabal () | |
{ | |
local f; | |
local version; | |
if [[ -z "$1" ]]; then | |
version="1.0.1"; | |
else | |
version="$1"; | |
fi; | |
for f in $(ghc-confdir)/cabal-*; | |
do | |
[[ -f "${f}" ]] && version_is_at_least "${version}" "${f#*cabal-}" && return; | |
done; | |
return 1 | |
} | |
ghc-setup-pkg () | |
{ | |
local localpkgconf="${S}/$(ghc-localpkgconf)"; | |
echo '[]' > "${localpkgconf}"; | |
for pkg in $*; | |
do | |
$(ghc-getghcpkgbin) -f "${localpkgconf}" update - --force < "${pkg}" || die "failed to register ${pkg}"; | |
done | |
} | |
ghc-supports-shared-libraries () | |
{ | |
$(ghc-getghc) --info | grep "RTS ways" | grep -q "dyn" | |
} | |
ghc-unregister-pkg () | |
{ | |
local localpkgconf="$(ghc-confdir)/$1"; | |
local i; | |
local pkg; | |
if [[ -f "${localpkgconf}" ]]; then | |
for pkg in $(ghc-reverse "$(ghc-listpkg ${localpkgconf})"); | |
do | |
if ! ghc-package-exists "${pkg}"; then | |
einfo "Package ${pkg} is not installed for ghc-$(ghc-version)."; | |
else | |
ebegin "Unregistering ${pkg} "; | |
$(ghc-getghcpkg) unregister "${pkg}" --force > /dev/null; | |
eend $?; | |
fi; | |
done; | |
fi | |
} | |
ghc-version () | |
{ | |
if [[ -z "${_GHC_VERSION_CACHE}" ]]; then | |
_GHC_VERSION_CACHE="$($(ghc-getghc) --numeric-version)"; | |
fi; | |
echo "${_GHC_VERSION_CACHE}" | |
} | |
has_multilib_profile () | |
{ | |
[ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] | |
} | |
haskell-cabal_pkg_setup () | |
{ | |
if [[ -z "${CABAL_HAS_BINARIES}" ]] && [[ -z "${CABAL_HAS_LIBRARIES}" ]]; then | |
eqawarn "QA Notice: Neither bin nor lib are in CABAL_FEATURES."; | |
fi; | |
if [[ -n "${CABAL_UNKNOWN}" ]]; then | |
eqawarn "QA Notice: Unknown entry in CABAL_FEATURES: ${CABAL_UNKNOWN}"; | |
fi; | |
if cabal-is-dummy-lib; then | |
einfo "${P} is included in ghc-${CABAL_CORE_LIB_GHC_PV}, nothing to install."; | |
fi | |
} | |
haskell-cabal_src_compile () | |
{ | |
pushd "${S}" > /dev/null; | |
cabal_src_compile "$@"; | |
popd > /dev/null | |
} | |
haskell-cabal_src_configure () | |
{ | |
cabal-is-dummy-lib && return; | |
pushd "${S}" > /dev/null; | |
cabal-bootstrap; | |
cabal-configure "$@"; | |
popd > /dev/null | |
} | |
haskell-cabal_src_install () | |
{ | |
pushd "${S}" > /dev/null; | |
cabal_src_install; | |
popd > /dev/null | |
} | |
haskell-cabal_src_test () | |
{ | |
pushd "${S}" > /dev/null; | |
if cabal-is-dummy-lib; then | |
einfo ">>> No tests for dummy library: ${CATEGORY}/${PF}"; | |
else | |
einfo ">>> Test phase [cabal test]: ${CATEGORY}/${PF}"; | |
set -- test "$@"; | |
echo ./setup "$@"; | |
./setup "$@" || die "cabal test failed"; | |
fi; | |
popd > /dev/null | |
} | |
in_iuse () | |
{ | |
debug-print-function ${FUNCNAME} "${@}"; | |
[[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()"; | |
local flag=${1}; | |
local liuse=(${IUSE}); | |
has "${flag}" "${liuse[@]#[+-]}" | |
} | |
is_final_abi () | |
{ | |
has_multilib_profile || return 0; | |
set -- $(get_install_abis); | |
local LAST_ABI=$#; | |
[[ ${!LAST_ABI} == ${ABI} ]] | |
} | |
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_setup () | |
{ | |
set -- -package "${cabalpackage}" --make "${setupmodule}" ${GHC_BOOTSTRAP_FLAGS} "$@" -o setup; | |
echo $(ghc-getghc) ${HCFLAGS} "$@"; | |
$(ghc-getghc) "$@" | |
} | |
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 | |
} | |
multilib_env () | |
{ | |
local CTARGET=${1:-${CTARGET}}; | |
case ${CTARGET} in | |
x86_64*) | |
export CFLAGS_x86=${CFLAGS_x86--m32}; | |
export CHOST_x86=${CTARGET/x86_64/i686}; | |
export CTARGET_x86=${CHOST_x86}; | |
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}; | |
export CTARGET_amd64=${CHOST_amd64}; | |
export LIBDIR_amd64="lib64"; | |
export CFLAGS_x32=${CFLAGS_x32--mx32}; | |
export CHOST_x32=${CTARGET}; | |
export CTARGET_x32=${CHOST_x32}; | |
export LIBDIR_x32="libx32"; | |
: ${MULTILIB_ABIS=amd64 x86}; | |
: ${DEFAULT_ABI=amd64} | |
;; | |
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} | |
;; | |
sparc*) | |
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 "$@" ) | |
} | |
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 () | |
{ | |
ghc-package_pkg_postinst "$@" | |
} | |
pkg_prerm () | |
{ | |
ghc-package_pkg_prerm "$@" | |
} | |
pkg_setup () | |
{ | |
haskell-cabal_pkg_setup "$@" | |
} | |
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; | |
[[ ${PN} == "mpfr" ]] && lib=${lib##*/}; | |
ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'"; | |
done | |
} | |
prune_libtool_files () | |
{ | |
debug-print-function ${FUNCNAME} "$@"; | |
local removing_all opt; | |
for opt in "$@"; | |
do | |
case "${opt}" in | |
--all) | |
removing_all=1 | |
;; | |
*) | |
die "Invalid argument to ${FUNCNAME}(): ${opt}" | |
;; | |
esac; | |
done; | |
local pc_libs=(); | |
if [[ ! -n ${removing_all} ]]; then | |
local f; | |
local tf=${T}/prune-lt-files.pc; | |
local pkgconf=$(tc-getPKG_CONFIG); | |
while IFS= read -r -d '' f; do | |
local arg; | |
sed -e '/^Requires:/d' "${f}" > "${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; | |
local f; | |
while IFS= read -r -d '' f; do | |
local archivefile=${f/%.la/.a}; | |
[[ ${f} != ${archivefile} ]] || die 'regex sanity check failed'; | |
if grep -q '^shouldnotlink=yes$' "${f}"; then | |
einfo "Removing unnecessary ${archivefile#${D%/}}"; | |
rm -f "${archivefile}"; | |
[[ -n ${removing_all} ]] || continue; | |
fi; | |
local reason; | |
if [[ -n ${removing_all} ]]; then | |
reason='requested'; | |
else | |
if [[ ! -f ${archivefile} ]]; then | |
reason='no static archive'; | |
else | |
if has "${f##*/}" "${pc_libs[@]}"; then | |
reason='covered by .pc'; | |
else | |
if [[ ! -n $(sed -nre "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" "${f}") ]]; then | |
reason='no libs & flags'; | |
fi; | |
fi; | |
fi; | |
fi; | |
if [[ -n ${reason} ]]; then | |
einfo "Removing unnecessary ${f#${D%/}} (${reason})"; | |
rm -f "${f}"; | |
fi; | |
done < <(find "${D}" -type f -name '*.la' -print0) | |
} | |
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 | |
} | |
src_compile () | |
{ | |
CABAL_CONFIGURE_FLAGS="--flags=-testing"; | |
CABAL_CONFIGURE_FLAGS="${CABAL_CONFIGURE_FLAGS} --flags=-use_xft"; | |
cabal_src_compile | |
} | |
src_configure () | |
{ | |
haskell-cabal_src_configure "$@" | |
} | |
src_install () | |
{ | |
haskell-cabal_src_install "$@" | |
} | |
src_test () | |
{ | |
haskell-cabal_src_test "$@" | |
} | |
src_unpack () | |
{ | |
_eapi0_src_unpack "$@" | |
} | |
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} | |
} | |
tc-arch () | |
{ | |
tc-ninja_magic_to_arch portage "$@" | |
} | |
tc-arch-kernel () | |
{ | |
tc-ninja_magic_to_arch kern "$@" | |
} | |
tc-endian () | |
{ | |
local host=$1; | |
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; | |
host=${host%%-*}; | |
case ${host} in | |
alpha*) | |
echo big | |
;; | |
arm*b*) | |
echo big | |
;; | |
arm*) | |
echo little | |
;; | |
cris*) | |
echo little | |
;; | |
hppa*) | |
echo big | |
;; | |
i?86*) | |
echo little | |
;; | |
ia64*) | |
echo little | |
;; | |
m68*) | |
echo big | |
;; | |
mips*l*) | |
echo little | |
;; | |
mips*) | |
echo big | |
;; | |
powerpc*) | |
echo big | |
;; | |
s390*) | |
echo big | |
;; | |
sh*b*) | |
echo big | |
;; | |
sh*) | |
echo little | |
;; | |
sparc*) | |
echo big | |
;; | |
x86_64*) | |
echo little | |
;; | |
*) | |
echo wtf | |
;; | |
esac | |
} | |
tc-env_build () | |
{ | |
CFLAGS=${BUILD_CFLAGS:--O1 -pipe} CXXFLAGS=${BUILD_CXXFLAGS:--O1 -pipe} 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-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}}; | |
case ${host} in | |
alpha*) | |
echo alpha | |
;; | |
arm*) | |
echo arm | |
;; | |
avr*) | |
ninj avr32 avr | |
;; | |
bfin*) | |
ninj blackfin bfin | |
;; | |
cris*) | |
echo cris | |
;; | |
hppa*) | |
ninj parisc hppa | |
;; | |
i?86*) | |
if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then | |
echo i386; | |
else | |
echo x86; | |
fi | |
;; | |
ia64*) | |
echo ia64 | |
;; | |
m68*) | |
echo m68k | |
;; | |
mips*) | |
echo mips | |
;; | |
nios2*) | |
echo nios2 | |
;; | |
nios*) | |
echo nios | |
;; | |
powerpc*) | |
if [[ ${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 | |
} | |
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