* [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
@ 2014-11-21 18:09 Jeramia Poland
2014-11-22 2:33 ` François Bissey
0 siblings, 1 reply; 12+ messages in thread
From: Jeramia Poland @ 2014-11-21 18:09 UTC (permalink / raw
To: gentoo-science
[-- Attachment #1.1: Type: text/plain, Size: 606 bytes --]
I've emerge sage-6.3 but the last package sage-doc is failing. I though
sage might work without it but it crashes when I attempt to run it saying
that pynac.so is an undefined symbol.
It seems like sage-doc is complaining of a symbol issue which I assume is
related to my "bizarre" gcc flag configuration. I've attempted to emerge
with no graphite and no lto flags but it still is not working. I attempted
changing to the 'vanilla' profile through gcc-config but that did not work
either.
What should I try next?
Attached are:
info output
build log
whatever -pqv outputs
environment
Thanks,
Jeramia
[-- Attachment #1.2: Type: text/html, Size: 1611 bytes --]
[-- Attachment #2: info.txt --]
[-- Type: text/plain, Size: 15894 bytes --]
Portage 2.2.8-r2 (hardened/linux/amd64, gcc-4.8.3, glibc-2.19-r1, 3.16.5-gentoo x86_64)
=================================================================
System Settings
=================================================================
System uname: Linux-3.16.5-gentoo-x86_64-AMD_A10-5700_APU_with_Radeon-tm-_HD_Graphics-with-gentoo-2.2
KiB Mem: 15873608 total, 9231428 free
KiB Swap: 0 total, 0 free
Timestamp of tree: Sun, 09 Nov 2014 08:00:01 +0000
ld GNU gold (Gentoo 2.24 p1.4 2.24) 1.11
ccache version 3.1.9 [disabled]
app-shells/bash: 4.2_p53
dev-java/java-config: 2.2.0
dev-lang/perl: 5.18.2-r2
dev-lang/python: 2.7.7, 3.3.5-r1, 3.4.1
dev-util/ccache: 3.1.9-r3
dev-util/cmake: 2.8.12.2-r1
dev-util/pkgconfig: 0.28-r1
sys-apps/baselayout: 2.2
sys-apps/openrc: 0.12.4
sys-apps/sandbox: 2.6-r1
sys-devel/autoconf: 2.13, 2.69
sys-devel/automake: 1.13.4
sys-devel/binutils: 2.24-r3
sys-devel/gcc: 4.8.3
sys-devel/gcc-config: 1.7.3
sys-devel/libtool: 2.4.2-r1
sys-devel/make: 4.0-r1
sys-kernel/linux-headers: 3.13 (virtual/os-headers)
sys-libs/glibc: 2.19-r1
Repositories: gentoo CloogPatch science sage-on-gentoo
ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="* -@EULA"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://gentoo.aditsu.net:8000/ http://gentoo.modulix.net/gentoo/ http://gentoo.gg3.net/"
LANG="en_US.utf8"
LDFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize -fuse-linker-plugin"
MAKEOPTS="-j5"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-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="/usr/local/portage /var/lib/layman/science /var/lib/layman/sage-on-gentoo"
USE="acl amd64 bash-completion bcmath berkdb bindist blas bzip2 cli cracklib crypt cxx dri emacs fftw gdbm graphite hardened iconv ipv6 justify lapack lm_sensors lto lzma lzo mmx modules multilib ncurses nls nptl openmp pam pax_kernel pcre python readline session smp sse sse2 sse3 sse4_1 ssl symlink syslog tcpd threads truetype udev unicode urandom usb xattr xtpax zlib" ABI_X86="64" 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" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" 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 ublox ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" RUBY_TARGETS="ruby19 ruby20" USERLAND="GNU" VIDEO_CARDS="fglrx" 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, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, SYNC, USE_PYTHON
Portage 2.2.8-r2 (hardened/linux/amd64, gcc-4.8.3, glibc-2.19-r1, 3.16.5-gentoo x86_64)
=================================================================
System Settings
=================================================================
System uname: Linux-3.16.5-gentoo-x86_64-AMD_A10-5700_APU_with_Radeon-tm-_HD_Graphics-with-gentoo-2.2
KiB Mem: 15873608 total, 5727044 free
KiB Swap: 0 total, 0 free
Timestamp of tree: Mon, 17 Nov 2014 11:00:01 +0000
ld GNU gold (Gentoo 2.24 p1.4 2.24) 1.11
ccache version 3.1.9 [disabled]
app-shells/bash: 4.2_p53
dev-java/java-config: 2.2.0
dev-lang/perl: 5.18.2-r2
dev-lang/python: 2.7.7, 3.3.5-r1, 3.4.1
dev-util/ccache: 3.1.9-r3
dev-util/cmake: 2.8.12.2-r1
dev-util/pkgconfig: 0.28-r1
sys-apps/baselayout: 2.2
sys-apps/openrc: 0.12.4
sys-apps/sandbox: 2.6-r1
sys-devel/autoconf: 2.13, 2.69
sys-devel/automake: 1.13.4
sys-devel/binutils: 2.24-r3
sys-devel/gcc: 4.8.3
sys-devel/gcc-config: 1.7.3
sys-devel/libtool: 2.4.2-r1
sys-devel/make: 4.0-r1
sys-kernel/linux-headers: 3.13 (virtual/os-headers)
sys-libs/glibc: 2.19-r1
Repositories: gentoo CloogPatch science sage-on-gentoo
ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="* -@EULA"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://gentoo.aditsu.net:8000/ http://gentoo.modulix.net/gentoo/ http://gentoo.gg3.net/"
LANG="en_US.utf8"
LDFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize -fuse-linker-plugin"
MAKEOPTS="-j5"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-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="/usr/local/portage /var/lib/layman/science /var/lib/layman/sage-on-gentoo"
USE="acl amd64 bash-completion bcmath berkdb bindist blas bzip2 cli cracklib crypt cxx dri emacs fftw gdbm graphite hardened iconv ipv6 justify lapack lm_sensors lto lzma lzo mmx modules multilib ncurses nls nptl openmp pam pax_kernel pcre python readline session smp sse sse2 sse3 sse4_1 ssl symlink syslog tcpd threads truetype udev unicode urandom usb xattr xtpax zlib" ABI_X86="64" 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" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" 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 ublox ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" RUBY_TARGETS="ruby19 ruby20" USERLAND="GNU" VIDEO_CARDS="fglrx" 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, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, SYNC, USE_PYTHON
Portage 2.2.8-r2 (hardened/linux/amd64, gcc-4.8.3, glibc-2.19-r1, 3.16.5-gentoo x86_64)
=================================================================
System Settings
=================================================================
System uname: Linux-3.16.5-gentoo-x86_64-AMD_A10-5700_APU_with_Radeon-tm-_HD_Graphics-with-gentoo-2.2
KiB Mem: 15870928 total, 13074708 free
KiB Swap: 0 total, 0 free
Timestamp of tree: Fri, 21 Nov 2014 11:30:01 +0000
ld GNU gold (Gentoo 2.24 p1.4 2.24) 1.11
ccache version 3.1.9 [disabled]
app-shells/bash: 4.2_p53
dev-java/java-config: 2.2.0
dev-lang/perl: 5.18.2-r2
dev-lang/python: 2.7.7, 3.3.5-r1, 3.4.1
dev-util/ccache: 3.1.9-r3
dev-util/cmake: 2.8.12.2-r1
dev-util/pkgconfig: 0.28-r1
sys-apps/baselayout: 2.2
sys-apps/openrc: 0.12.4
sys-apps/sandbox: 2.6-r1
sys-devel/autoconf: 2.13, 2.69
sys-devel/automake: 1.13.4
sys-devel/binutils: 2.24-r3
sys-devel/gcc: 4.8.3
sys-devel/gcc-config: 1.7.3
sys-devel/libtool: 2.4.2-r1
sys-devel/make: 4.0-r1
sys-kernel/linux-headers: 3.16 (virtual/os-headers)
sys-libs/glibc: 2.19-r1
Repositories: gentoo CloogPatch science sage-on-gentoo
ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="* -@EULA"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /usr/share/gnupg/qualified.txt /var/lib/hsqldb"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize"
DISTDIR="/usr/portage/distfiles"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync news parallel-fetch preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://gentoo.aditsu.net:8000/ http://gentoo.modulix.net/gentoo/ http://gentoo.gg3.net/"
LANG="en_US.utf8"
LDFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize -fuse-linker-plugin"
MAKEOPTS="-j1"
PKGDIR="/usr/portage/packages"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-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="/usr/local/portage /var/lib/layman/science /var/lib/layman/sage-on-gentoo"
USE="acl amd64 bash-completion bcmath berkdb bindist blas bzip2 cli cracklib crypt cxx dri emacs fftw gdbm graphite hardened iconv ipv6 justify lapack lm_sensors lto lzma lzo mmx modules multilib ncurses nls nptl openmp pam pax_kernel pcre python readline session smp sse sse2 sse3 sse4_1 ssl symlink syslog tcpd threads truetype udev unicode urandom usb xattr xtpax zlib" ABI_X86="64" 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" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author" 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 ublox ubx" INPUT_DEVICES="evdev" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php5-5" PYTHON_SINGLE_TARGET="python2_7" PYTHON_TARGETS="python2_7 python3_3" RUBY_TARGETS="ruby19 ruby20" USERLAND="GNU" VIDEO_CARDS="radeon" 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, LC_ALL, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, SYNC, USE_PYTHON
=================================================================
Package Settings
=================================================================
sci-mathematics/sage-doc-6.3 was built with the following:
USE="-html" ABI_X86="64" PYTHON_TARGETS="python2_7"
[-- Attachment #3: build.log --]
[-- Type: text/x-log, Size: 4479 bytes --]
^[[32;01m * ^[[39;49;00mPackage: sci-mathematics/sage-doc-6.3
^[[32;01m * ^[[39;49;00mRepository: sage-on-gentoo
^[[32;01m * ^[[39;49;00mMaintainer: sci@gentoo.org
^[[32;01m * ^[[39;49;00mUSE: abi_x86_64 amd64 elibc_glibc html kernel_linux python_targets_python2_7 userland_GNU
^[[32;01m * ^[[39;49;00mFEATURES: preserve-libs sandbox userpriv usersandbox
>>> Unpacking source...
>>> Unpacking sage-6.3.tar.gz to /var/tmp/portage/sci-mathematics/sage-doc-6.3/work
>>> Unpacking Singular-3-1-6-share.tar.gz to /var/tmp/portage/sci-mathematics/sage-doc-6.3/work
>>> Source unpacked in /var/tmp/portage/sci-mathematics/sage-doc-6.3/work
>>> Preparing source in /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src ...
^[[32;01m*^[[0m Applying sage-doc-6.0-misc.patch ...
^[[A^[[72C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
^[[32;01m*^[[0m Applying sage-doc-dev.patch ...
^[[A^[[72C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
^[[32;01m*^[[0m Applying sage-doc-6.2-seealso.patch ...
^[[A^[[72C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
^[[32;01m*^[[0m Applying sage-doc-6.2-sphinx.patch ...
^[[A^[[72C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
^[[32;01m*^[[0m Applying sage-doc-6.2-favicon.patch ...
^[[A^[[72C ^[[34;01m[ ^[[32;01mok^[[34;01m ]^[[0m
>>> Source prepared.
>>> Configuring source in /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src ...
>>> Source configured.
>>> Compiling source in /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src ...
^[[32;01m*^[[0m python2_7: running distutils-r1_run_phase python_compile
Setting permissions of DOT_SAGE directory so only you can read and write it.
Deleting empty directory /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src/doc/output/doctrees/en/tutorial
Deleting empty directory /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src/doc/en/reference/templates
Deleting empty directory /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src/doc/en/reference/static
Deleting empty directory /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src/doc/en/tutorial/templates
Deleting empty directory /var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src/doc/en/tutorial/static
Traceback (most recent call last):
File "doc/common/builder.py", line 1483, in <module>
import sage.all
File "/usr/lib64/python2.7/site-packages/sage/all.py", line 103, in <module>
import sage.symbolic.pynac
ImportError: /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so: undefined symbol: _ZTVN5GiNaC9containerISt6vectorEE
^[[31;01m*^[[0m ERROR: sci-mathematics/sage-doc-6.3::sage-on-gentoo failed (compile phase):
^[[31;01m*^[[0m failed to produce html doc
^[[31;01m*^[[0m
^[[31;01m*^[[0m Call stack:
^[[31;01m*^[[0m ebuild.sh, line 93: Called src_compile
^[[31;01m*^[[0m environment, line 3640: Called distutils-r1_src_compile
^[[31;01m*^[[0m environment, line 1010: Called _distutils-r1_run_foreach_impl 'python_compile'
^[[31;01m*^[[0m environment, line 253: Called python_foreach_impl 'distutils-r1_run_phase' 'python_compile'
^[[31;01m*^[[0m environment, line 3244: Called multibuild_foreach_variant '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_compile'
^[[31;01m*^[[0m environment, line 2365: Called _multibuild_run '_python_multibuild_wrapper' 'distutils-r1_run_phase' 'python_compile'
^[[31;01m*^[[0m environment, line 2363: Called _python_multibuild_wrapper 'distutils-r1_run_phase' 'python_compile'
^[[31;01m*^[[0m environment, line 675: Called distutils-r1_run_phase 'python_compile'
^[[31;01m*^[[0m environment, line 1001: Called python_compile
^[[31;01m*^[[0m environment, line 2871: Called die
^[[31;01m*^[[0m The specific snippet of code:
^[[31;01m*^[[0m ${PYTHON} doc/common/builder.py --no-pdf-links all html || die "failed to produce html doc";
^[[31;01m*^[[0m
^[[31;01m*^[[0m If you need support, post the output of `emerge --info '=sci-mathematics/sage-doc-6.3::sage-on-gentoo'`,
^[[31;01m*^[[0m the complete build log and the output of `emerge -pqv '=sci-mathematics/sage-doc-6.3::sage-on-gentoo'`.
^[[31;01m*^[[0m The complete build log is located at '/var/tmp/portage/sci-mathematics/sage-doc-6.3/temp/build.log'.
^[[31;01m*^[[0m The ebuild environment file is located at '/var/tmp/portage/sci-mathematics/sage-doc-6.3/temp/environment'.
^[[31;01m*^[[0m Working directory: '/var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src'
^[[31;01m*^[[0m S: '/var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src'
[-- Attachment #4: environment --]
[-- Type: application/octet-stream, Size: 139606 bytes --]
declare -x ABI="amd64"
declare -x ABI_X86="64"
declare -x 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"
declare -x ANT_HOME="/usr/share/ant"
declare -x APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias"
declare -x ARCH="amd64"
declare -x BOOTSTRAP_USE="cxx unicode internal-glib python_targets_python3_3 python_targets_python2_7 multilib hardened pax_kernel pic xtpax -jit -orc"
declare -x CALLIGRA_FEATURES="kexi words flow plan sheets stage tables krita karbon braindump author"
declare -x CAMERAS="ptp2"
declare -x CBUILD="x86_64-pc-linux-gnu"
declare -x CFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize -fno-lto -fno-use-linker-plugin -fno-loop-interchange -fno-tree-loop-distribution -fno-loop-strip-mine -fno-loop-block"
declare -x CFLAGS_amd64="-m64"
declare -x CFLAGS_default
declare -x CFLAGS_x32="-mx32"
declare -x CFLAGS_x86="-m32"
declare -x CHOST="x86_64-pc-linux-gnu"
declare -x CHOST_amd64="x86_64-pc-linux-gnu"
declare -x CHOST_default="x86_64-pc-linux-gnu"
declare -x CHOST_x32="x86_64-pc-linux-gnux32"
declare -x CHOST_x86="i686-pc-linux-gnu"
declare -x COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog"
declare -x CTARGET_default="x86_64-pc-linux-gnu"
declare -x CXXFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize -fno-lto -fno-use-linker-plugin -fno-loop-interchange -fno-tree-loop-distribution -fno-loop-strip-mine -fno-loop-block"
declare -x DEFAULT_ABI="amd64"
declare -x DEFINED_PHASES=" compile configure install postinst prepare test"
declare DEPEND="|| ( <dev-python/docutils-0.10[python_targets_python2_7(-)?,-python_single_target_python2_7(-)] >dev-python/docutils-0.10[python_targets_python2_7(-)?,-python_single_target_python2_7(-)] )
sci-mathematics/sage python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) dev-lang/python-exec:=[python_targets_python2_7(-)?,-python_single_target_python2_7(-)]"
declare DESCRIPTION="Documentation, tutorials and help files for Sage"
declare -x DESTTREE="/usr"
declare -x DIROPTIONS="-m0755"
declare -- DISTUTILS_NO_PARALLEL_BUILD="1"
declare -x EAPI="5"
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/sci-mathematics/sage-doc-6.3/work/patch"
declare -- EPATCH_SUFFIX="patch.bz2"
declare -x EXEOPTIONS="-m0755"
declare -x FCFLAGS="-O2 -pipe"
declare -x FETCHCOMMAND_SSH="bash -c \"x=\\\${2#ssh://} ; host=\\\${x%%/*} ; port=\\\${host##*:} ; host=\\\${host%:*} ; [[ \\\${host} = \\\${port} ]] && port=22 ; exec rsync --rsh=\\\"ssh -p\\\${port} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
declare -x FFLAGS="-O2 -pipe"
declare -x GCC_SPECS=""
declare -x GENTOO_PYTHON_PROCESS_NAME="emerge"
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 ublox ubx"
declare -x GRAPHITE="-floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block"
declare -x GRUB_PLATFORMS=""
declare HDEPEND=""
declare HOMEPAGE="http://www.sagemath.org/"
declare -x INHERITED=" multilib toolchain-funcs eutils multiprocessing multibuild python-utils-r1 python-r1 distutils-r1 versionator"
declare -x INPUT_DEVICES="evdev"
declare -x INSDESTTREE=""
declare -x INSOPTIONS="-m0644"
declare IUSE="html python_targets_python2_7"
declare -x IUSE_EFFECTIVE="abi_x86_64 alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 elibc_AIX elibc_Cygwin elibc_Darwin elibc_DragonFly elibc_FreeBSD elibc_HPUX elibc_Interix elibc_NetBSD elibc_OpenBSD elibc_SunOS elibc_Winnt elibc_glibc elibc_mintlib elibc_musl elibc_uclibc hppa hppa-hpux html ia64 ia64-hpux ia64-linux kernel_AIX kernel_Cygwin kernel_Darwin kernel_FreeBSD kernel_HPUX kernel_Interix kernel_NetBSD kernel_OpenBSD kernel_SunOS kernel_Winnt kernel_freemint kernel_linux m68k m68k-mint mips ppc ppc-aix ppc-macos ppc-openbsd ppc64 ppc64-linux prefix python_targets_python2_7 s390 sh sparc sparc-fbsd sparc-solaris sparc64-freebsd sparc64-solaris userland_BSD userland_GNU x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
declare -x IUSE_IMPLICIT="abi_x86_64 prefix"
declare -x KERNEL="linux"
declare -x KERNEL_ABI="amd64"
declare -x KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
declare -x LANG="en_US.utf8"
declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text"
declare -x LC_MESSAGES="C"
declare -x LDFLAGS="-march=native -O2 -pipe -flto=4 -floop-interchange -ftree-loop-distribution -floop-strip-mine -floop-block -ftree-vectorize -fuse-linker-plugin -fno-lto -fno-use-linker-plugin -fno-loop-interchange -fno-tree-loop-distribution -fno-loop-strip-mine -fno-loop-block"
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_arm="lib"
declare -x LIBDIR_arm64="lib64"
declare -x LIBDIR_default="lib"
declare -x LIBDIR_n32="lib32"
declare -x LIBDIR_n64="lib64"
declare -x LIBDIR_o32="lib"
declare -x LIBDIR_ppc="lib32"
declare -x LIBDIR_ppc64="lib64"
declare -x LIBDIR_s390="lib32"
declare -x LIBDIR_s390x="lib64"
declare -x LIBDIR_sparc32="lib32"
declare -x LIBDIR_sparc64="lib64"
declare -x LIBDIR_x32="libx32"
declare -x LIBDIR_x86="lib32"
declare -x LIBDIR_x86_fbsd="lib32"
declare -x LIBOPTIONS="-m0644"
declare -x LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer"
declare -x LICENSE="GPL-2"
declare -x MAIL="/var/mail/root"
declare -x MAKEOPTS="-j1"
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|systemd|clang|python-exec)"
declare -x MULTIOSDIRS="../lib64:../lib32"
declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
declare -x OFFICE_IMPLEMENTATION="libreoffice"
declare -x OPENGL_PROFILE="xorg-x11"
declare -a PATCHES='([0]="/var/lib/layman/sage-on-gentoo/sci-mathematics/sage-doc/files/sage-doc-6.0-misc.patch" [1]="/var/lib/layman/sage-on-gentoo/sci-mathematics/sage-doc/files/sage-doc-dev.patch" [2]="/var/lib/layman/sage-on-gentoo/sci-mathematics/sage-doc/files/sage-doc-6.2-seealso.patch" [3]="/var/lib/layman/sage-on-gentoo/sci-mathematics/sage-doc/files/sage-doc-6.2-sphinx.patch" [4]="/var/lib/layman/sage-on-gentoo/sci-mathematics/sage-doc/files/sage-doc-6.2-favicon.patch")'
declare -x PATH="/usr/lib64/portage/bin/ebuild-helpers/xattr:/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.8.3"
declare PDEPEND=""
declare -x PHP_TARGETS="php5-5"
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 -x PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
declare -a PORTAGE_DOCOMPRESS_SKIP='([0]="/usr/share/doc/sage-doc-6.3/html")'
declare -x PROFILE_IS_HARDENED="1"
declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC IUSE_IMPLICIT KERNEL USERLAND USE_EXPAND_IMPLICIT USE_EXPAND_UNPREFIXED USE_EXPAND_VALUES_ARCH USE_EXPAND_VALUES_ELIBC USE_EXPAND_VALUES_KERNEL USE_EXPAND_VALUES_USERLAND"
declare -x PROPERTIES=""
declare -x PROVIDE=""
declare -x PYTHONDONTWRITEBYTECODE="1"
declare -a PYTHON_COMPAT='([0]="python2_7")'
declare -- PYTHON_DEPS="python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) dev-lang/python-exec:=[python_targets_python2_7(-)?,-python_single_target_python2_7(-)]"
declare -- PYTHON_REQUIRED_USE="|| ( python_targets_python2_7 )"
declare -x PYTHON_SINGLE_TARGET="python2_7"
declare -x PYTHON_TARGETS="python2_7"
declare -- PYTHON_USEDEP="python_targets_python2_7(-)?,-python_single_target_python2_7(-)"
declare RDEPEND="|| ( <dev-python/docutils-0.10[python_targets_python2_7(-)?,-python_single_target_python2_7(-)] >dev-python/docutils-0.10[python_targets_python2_7(-)?,-python_single_target_python2_7(-)] )
sci-mathematics/sage
~dev-python/sphinx-1.1.3[python_targets_python2_7(-)?,-python_single_target_python2_7(-)] python_targets_python2_7? ( >=dev-lang/python-2.7.5-r2:2.7 ) dev-lang/python-exec:=[python_targets_python2_7(-)?,-python_single_target_python2_7(-)]"
declare REPOSITORY
declare REQUIRED_USE="|| ( python_targets_python2_7 )"
declare -x RESTRICT="mirror"
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} \\\${3}\\\" -avP \\\"\\\${host}:/\\\${x#*/}\\\" \\\"\\\$1\\\"\" rsync \"\${DISTDIR}/\${FILE}\" \"\${URI}\" \"\${PORTAGE_SSH_OPTS}\""
declare -x RUBY_TARGETS="ruby19 ruby20"
declare -x R_HOME="/usr/lib64/R"
declare -x S="/var/tmp/portage/sci-mathematics/sage-doc-6.3/work/sage-6.3/src"
declare -x SANDBOX_DEBUG="0"
declare -x SANDBOX_DENY=""
declare -x SANDBOX_PID="1726"
declare -x SANDBOX_PREDICT="/var/tmp/portage/sci-mathematics/sage-doc-6.3/homedir:/dev/crypto:/proc/self/coredump_filter:/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/sci-mathematics/sage-doc-6.3/homedir/.bash_history"
declare -x SHELL="/bin/bash"
declare -x SLOT="0"
declare SRC_URI="mirror://sagemath/6.3.tar.gz -> sage-6.3.tar.gz
http://www.mathematik.uni-kl.de/ftp/pub/Math/Singular/SOURCES/3-1-6/Singular-3-1-6-share.tar.gz"
declare -x SUDO_COMMAND="/usr/bin/emerge --resume"
declare -x SUDO_GID="1000"
declare -x SUDO_UID="1000"
declare -x SUDO_USER="jeramia"
declare -x SYMLINK_LIB="yes"
declare -x USE="abi_x86_64 amd64 elibc_glibc html kernel_linux python_targets_python2_7 userland_GNU"
declare -x USERLAND="GNU"
declare -x USERNAME="root"
declare -x USE_EXPAND_IMPLICIT="ARCH ELIBC KERNEL USERLAND"
declare -x USE_EXPAND_UNPREFIXED="ARCH"
declare -x USE_EXPAND_VALUES_ARCH="alpha amd64 amd64-fbsd amd64-linux arm arm-linux arm64 hppa hppa-hpux ia64 ia64-hpux ia64-linux m68k m68k-mint mips ppc ppc64 ppc64-linux ppc-aix ppc-macos ppc-openbsd s390 sh sparc sparc64-freebsd sparc64-solaris sparc-fbsd sparc-solaris x64-freebsd x64-macos x64-openbsd x64-solaris x86 x86-cygwin x86-fbsd x86-freebsd x86-interix x86-linux x86-macos x86-netbsd x86-openbsd x86-solaris x86-winnt"
declare -x USE_EXPAND_VALUES_ELIBC="AIX Cygwin Darwin DragonFly FreeBSD glibc HPUX Interix mintlib musl NetBSD OpenBSD SunOS uclibc Winnt"
declare -x USE_EXPAND_VALUES_KERNEL="AIX Cygwin Darwin FreeBSD freemint HPUX Interix linux NetBSD OpenBSD SunOS Winnt"
declare -x USE_EXPAND_VALUES_USERLAND="BSD GNU"
declare -x VIDEO_CARDS="radeon"
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 -- _DISTUTILS_R1="1"
declare -- _EUTILS_ECLASS="1"
declare -x _E_DOCDESTTREE_=""
declare -x _E_EXEDESTTREE_=""
declare -- _MULTIBUILD="1"
declare -- _MULTILIB_ECLASS="1"
declare -- _MULTIPROCESSING_ECLASS="1"
declare -a _PYTHON_ALL_IMPLS='([0]="jython2_5" [1]="jython2_7" [2]="pypy" [3]="pypy3" [4]="python3_2" [5]="python3_3" [6]="python3_4" [7]="python2_7")'
declare -- _PYTHON_R1="1"
declare -- _PYTHON_UTILS_R1="1"
declare -- _TOOLCHAIN_FUNCS_ECLASS="1"
declare -- _VERSIONATOR_ECLASS="1"
declare -- phase_func
__bashpid ()
{
sh -c 'echo ${PPID}'
}
_distutils-r1_copy_egg_info ()
{
mkdir -p "${BUILD_DIR}" || die;
find -name '*.egg-info' -type d -exec cp -pr {} "${BUILD_DIR}"/ ';' || die
}
_distutils-r1_create_setup_cfg ()
{
cat > "${HOME}"/.pydistutils.cfg <<-_EOF_ ||
[build]
build-base = ${BUILD_DIR}
# using a single directory for them helps us export
# ${PYTHONPATH} and ebuilds find the sources independently
# of whether the package installs extensions or not
#
# note: due to some packages (wxpython) relying on separate
# platlib & purelib dirs, we do not set --build-lib (which
# can not be overriden with --build-*lib)
build-platlib = %(build-base)s/lib
build-purelib = %(build-base)s/lib
# make the ebuild writer lives easier
build-scripts = %(build-base)s/scripts
[egg_info]
egg-base = ${BUILD_DIR}
# this is needed by distutils_install_for_testing since
# setuptools like to create .egg files for install --home.
[bdist_egg]
dist-dir = ${BUILD_DIR}/dist
_EOF_
die
if [[ ${EBUILD_PHASE} == install ]]; then
cat >> "${HOME}"/.pydistutils.cfg <<-_EOF_ ||
# installation paths -- allow calling extra install targets
# without the default 'install'
[install]
compile = True
optimize = 2
root = ${D}
_EOF_
die
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]] && _python_want_python_exec2; then
cat >> "${HOME}"/.pydistutils.cfg <<-_EOF_ ||
install-scripts = $(python_get_scriptdir)
_EOF_
die;
fi;
fi
}
_distutils-r1_disable_ez_setup ()
{
local stub="def use_setuptools(*args, **kwargs): pass";
if [[ -f ez_setup.py ]]; then
echo "${stub}" > ez_setup.py || die;
fi;
if [[ -f distribute_setup.py ]]; then
echo "${stub}" > distribute_setup.py || die;
fi
}
_distutils-r1_run_common_phase ()
{
local DISTUTILS_ORIG_BUILD_DIR=${BUILD_DIR};
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_for_best_variant _python_multibuild_wrapper distutils-r1_run_phase "${@}";
else
_distutils-r1_run_foreach_impl "${@}";
fi
}
_distutils-r1_run_foreach_impl ()
{
debug-print-function ${FUNCNAME} "${@}";
set -- distutils-r1_run_phase "${@}";
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
if [[ -n ${DISTUTILS_NO_PARALLEL_BUILD} || -n ${DISTUTILS_SINGLE_IMPL} ]]; then
python_foreach_impl "${@}";
else
python_parallel_foreach_impl "${@}";
fi;
else
if [[ ! -n ${EPYTHON} ]]; then
die "EPYTHON unset, python-single-r1_pkg_setup not called?!";
fi;
local BUILD_DIR=${BUILD_DIR:-${S}};
BUILD_DIR=${BUILD_DIR%%/}_${EPYTHON};
"${@}";
fi
}
_distutils-r1_wrap_scripts ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${#} -eq 2 ]] || die "usage: ${FUNCNAME} <path> <bindir>";
local path=${1};
local bindir=${2};
local PYTHON_SCRIPTDIR;
if _python_want_python_exec2; then
python_export PYTHON_SCRIPTDIR;
else
PYTHON_SCRIPTDIR=${bindir};
fi;
local f python_files=() non_python_files=();
if [[ -d ${path}${PYTHON_SCRIPTDIR} ]]; then
for f in "${path}${PYTHON_SCRIPTDIR}"/*;
do
[[ -d ${f} ]] && die "Unexpected directory: ${f}";
debug-print "${FUNCNAME}: found executable at ${f#${path}/}";
local shebang;
read -r shebang < "${f}";
if [[ ${shebang} == '#!'*${EPYTHON}* ]]; then
debug-print "${FUNCNAME}: matching shebang: ${shebang}";
python_files+=("${f}");
else
if _python_want_python_exec2; then
debug-print "${FUNCNAME}: non-matching shebang: ${shebang}";
non_python_files+=("${f}");
fi;
fi;
mkdir -p "${path}${bindir}" || die;
done;
for f in "${python_files[@]}";
do
local basename=${f##*/};
if ! _python_want_python_exec2; then
local newf=${f%/*}/${basename}-${EPYTHON};
debug-print "${FUNCNAME}: renaming ${f#${path}/} to ${newf#${path}/}";
mv "${f}" "${newf}" || die;
fi;
debug-print "${FUNCNAME}: installing wrapper at ${bindir}/${basename}";
_python_ln_rel "${path}${EPREFIX}"$(_python_get_wrapper_path) "${path}${bindir}/${basename}" || die;
done;
for f in "${non_python_files[@]}";
do
local basename=${f##*/};
debug-print "${FUNCNAME}: moving ${f#${path}/} to ${bindir}/${basename}";
mv "${f}" "${path}${bindir}/${basename}" || die;
done;
fi
}
_epatch_draw_line ()
{
[[ -z $1 ]] && set "$(printf "%65s" '')";
echo "${1//?/=}"
}
_eutils_eprefix_init ()
{
has "${EAPI:-0}" 0 1 2 && : ${ED:=${D}} ${EPREFIX:=} ${EROOT:=${ROOT}}
}
_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
}
_multijob_fork ()
{
[[ $# -eq 1 ]] || die "incorrect number of arguments";
local ret=0;
[[ $1 == "post" ]] && : $(( ++mj_num_jobs ));
if [[ ${mj_num_jobs} -ge ${mj_max_jobs} ]]; then
multijob_finish_one;
ret=$?;
fi;
[[ $1 == "pre" ]] && : $(( ++mj_num_jobs ));
return ${ret}
}
_python_check_USE_PYTHON ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ ! -n ${_PYTHON_USE_PYTHON_CHECKED} ]]; then
_PYTHON_USE_PYTHON_CHECKED=1;
if [[ ${CATEGORY}/${PN} == dev-lang/python-exec ]]; then
return;
fi;
function _try_eselect ()
{
local impl py2 py3 dis_py2 dis_py3;
for impl in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${impl}" || continue;
if use "python_targets_${impl}"; then
case "${impl}" in
python2_*)
if [[ -n ${py2+1} ]]; then
debug-print "${FUNCNAME}: -> more than one py2: ${py2} ${impl}";
return 1;
fi;
py2=${impl/_/.}
;;
python3_4)
debug-print "${FUNCNAME}: python3.4 found, not using eselect";
return 1
;;
python3_*)
if [[ -n ${py3+1} ]]; then
debug-print "${FUNCNAME}: -> more than one py3: ${py3} ${impl}";
return 1;
fi;
py3=${impl/_/.}
;;
*)
return 1
;;
esac;
else
case "${impl}" in
python2_*)
dis_py2=1
;;
python3_*)
dis_py3=1
;;
esac;
fi;
done;
if [[ ! -n ${py2+1} && -n ${dis_py2} ]]; then
debug-print "${FUNCNAME}: -> all py2 versions disabled";
if ! has python2_7 "${PYTHON_COMPAT[@]}"; then
debug-print "${FUNCNAME}: ---> package does not support 2.7";
return 0;
fi;
if has_version '=dev-lang/python-2*'; then
debug-print "${FUNCNAME}: ---> but =python-2* installed!";
return 1;
fi;
fi;
if [[ ! -n ${py3+1} && -n ${dis_py3} ]]; then
debug-print "${FUNCNAME}: -> all py3 versions disabled";
if ! has python3_2 "${PYTHON_COMPAT[@]}"; then
debug-print "${FUNCNAME}: ---> package does not support 3.2";
return 0;
fi;
if has_version '=dev-lang/python-3*'; then
debug-print "${FUNCNAME}: ---> but =python-3* installed!";
return 1;
fi;
fi;
local warned;
if [[ -n ${py2+1} ]]; then
local sel_py2=$(eselect python show --python2);
debug-print "${FUNCNAME}: -> py2 built: ${py2}, active: ${sel_py2}";
if [[ ${py2} != ${sel_py2} ]]; then
ewarn "Building package for ${py2} only while ${sel_py2} is active.";
ewarn "Please consider switching the active Python 2 interpreter:";
ewarn;
ewarn " eselect python set --python2 ${py2}";
warned=1;
fi;
fi;
if [[ -n ${py3+1} ]]; then
local sel_py3=$(eselect python show --python3);
debug-print "${FUNCNAME}: -> py3 built: ${py3}, active: ${sel_py3}";
if [[ ${py3} != ${sel_py3} ]]; then
[[ -n ${warned} ]] && ewarn;
ewarn "Building package for ${py3} only while ${sel_py3} is active.";
ewarn "Please consider switching the active Python 3 interpreter:";
ewarn;
ewarn " eselect python set --python3 ${py3}";
warned=1;
fi;
fi;
if [[ -n ${warned} ]]; then
ewarn;
ewarn "Please note that after switching the active Python interpreter,";
ewarn "you may need to run 'python-updater' to rebuild affected packages.";
ewarn;
ewarn "For more information on PYTHON_TARGETS and python.eclass";
ewarn "compatibility, please see the relevant Wiki article [1].";
ewarn;
ewarn "[1] https://wiki.gentoo.org/wiki/Project:Python/PYTHON_TARGETS";
fi
};
if [[ ! -n ${USE_PYTHON} ]]; then
debug-print "${FUNCNAME}: trying eselect solution ...";
_try_eselect && return;
fi;
debug-print "${FUNCNAME}: trying USE_PYTHON solution ...";
debug-print "${FUNCNAME}: -> USE_PYTHON=${USE_PYTHON}";
local impl old=${USE_PYTHON} new=() removed=();
for impl in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${impl}" || continue;
local abi;
case "${impl}" in
pypy | pypy3 | python3_4)
continue
;;
python*)
abi=${impl#python}
;;
jython*)
abi=${impl#jython}-jython
;;
*)
die "Unexpected Python implementation: ${impl}"
;;
esac;
abi=${abi/_/.};
has "${abi}" ${USE_PYTHON};
local has_abi=${?};
use "python_targets_${impl}";
local has_impl=${?};
if [[ ${has_abi} == 0 && ${has_impl} == 1 ]]; then
debug-print "${FUNCNAME}: ---> remove ${abi}";
old=${old/${abi}/};
removed+=(${abi});
else
if [[ ${has_abi} == 1 && ${has_impl} == 0 ]]; then
debug-print "${FUNCNAME}: ---> add ${abi}";
new+=(${abi});
fi;
fi;
done;
if [[ -n ${removed[@]} || -n ${new[@]} ]]; then
old=(${old});
debug-print "${FUNCNAME}: -> old: ${old[@]}";
debug-print "${FUNCNAME}: -> new: ${new[@]}";
debug-print "${FUNCNAME}: -> removed: ${removed[@]}";
if [[ -n ${USE_PYTHON} ]]; then
ewarn "It seems that your USE_PYTHON setting lists different Python";
ewarn "implementations than your PYTHON_TARGETS variable. Please consider";
ewarn "using the following value instead:";
ewarn;
ewarn " USE_PYTHON='\033[35m${old[@]}${new[@]+ \033[1m${new[@]}}\033[0m'";
if [[ -n ${removed[@]} ]]; then
ewarn;
ewarn "(removed \033[31m${removed[@]}\033[0m)";
fi;
else
ewarn "It seems that you need to set USE_PYTHON to make sure that legacy";
ewarn "packages will be built with respect to PYTHON_TARGETS correctly:";
ewarn;
ewarn " USE_PYTHON='\033[35;1m${new[@]}\033[0m'";
fi;
ewarn;
ewarn "Please note that after changing the USE_PYTHON variable, you may need";
ewarn "to run 'python-updater' to rebuild affected packages.";
ewarn;
ewarn "For more information on PYTHON_TARGETS and python.eclass";
ewarn "compatibility, please see the relevant Wiki article [1].";
ewarn;
ewarn "[1] https://wiki.gentoo.org/wiki/Project:Python/PYTHON_TARGETS";
fi;
fi
}
_python_get_wrapper_path ()
{
debug-print-function ${FUNCNAME} "${@}";
if _python_want_python_exec2; then
echo /usr/lib/python-exec/python-exec2;
else
echo /usr/bin/python-exec;
fi
}
_python_impl_supported ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${#} -eq 1 ]] || die "${FUNCNAME}: takes exactly 1 argument (impl).";
local impl=${1};
case "${impl}" in
python2_7 | python3_[234] | jython2_[57])
return 0
;;
pypy1_[89] | pypy2_0 | python2_[56] | python3_1)
return 1
;;
pypy | pypy3)
if [[ ${EAPI:-0} == [01234] ]]; then
die "PyPy is supported in EAPI 5 and newer only.";
fi
;;
*)
die "Invalid implementation in PYTHON_COMPAT: ${impl}"
;;
esac
}
_python_ln_rel ()
{
debug-print-function ${FUNCNAME} "${@}";
local target=${1};
local symname=${2};
local tgpath=${target%/*}/;
local sympath=${symname%/*}/;
local rel_target=;
while [[ -n ${sympath} ]]; do
local tgseg= symseg=;
while [[ ! -n ${tgseg} && -n ${tgpath} ]]; do
tgseg=${tgpath%%/*};
tgpath=${tgpath#${tgseg}/};
done;
while [[ ! -n ${symseg} && -n ${sympath} ]]; do
symseg=${sympath%%/*};
sympath=${sympath#${symseg}/};
done;
if [[ ${tgseg} != ${symseg} ]]; then
rel_target=../${rel_target}${tgseg:+${tgseg}/};
fi;
done;
rel_target+=${tgpath}${target##*/};
debug-print "${FUNCNAME}: ${symname} -> ${target}";
debug-print "${FUNCNAME}: rel_target = ${rel_target}";
ln -fs "${rel_target}" "${symname}"
}
_python_multibuild_wrapper ()
{
debug-print-function ${FUNCNAME} "${@}";
local -x EPYTHON PYTHON;
local -x PATH=${PATH} PKG_CONFIG_PATH=${PKG_CONFIG_PATH};
python_export "${MULTIBUILD_VARIANT}" EPYTHON PYTHON;
python_wrapper_setup;
"${@}"
}
_python_obtain_impls ()
{
if [[ -n ${PYTHON_COMPAT_OVERRIDE} ]]; then
if [[ ! -n ${_PYTHON_COMPAT_OVERRIDE_WARNED} ]]; then
ewarn "WARNING: PYTHON_COMPAT_OVERRIDE in effect. The following Python";
ewarn "implementations will be enabled:";
ewarn;
ewarn " ${PYTHON_COMPAT_OVERRIDE}";
ewarn;
ewarn "Dependencies won't be satisfied, and PYTHON_TARGETS will be ignored.";
_PYTHON_COMPAT_OVERRIDE_WARNED=1;
fi;
MULTIBUILD_VARIANTS=(${PYTHON_COMPAT_OVERRIDE});
return;
fi;
_python_validate_useflags;
_python_check_USE_PYTHON;
MULTIBUILD_VARIANTS=();
for impl in "${_PYTHON_ALL_IMPLS[@]}";
do
if has "${impl}" "${PYTHON_COMPAT[@]}" && use "python_targets_${impl}"; then
MULTIBUILD_VARIANTS+=("${impl}");
fi;
done
}
_python_set_globals ()
{
local impls=();
PYTHON_DEPS=;
local i PYTHON_PKG_DEP;
for i in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${i}" || continue;
python_export "${i}" PYTHON_PKG_DEP;
PYTHON_DEPS+="python_targets_${i}? ( ${PYTHON_PKG_DEP} ) ";
impls+=("${i}");
done;
if [[ ${#impls[@]} -eq 0 ]]; then
die "No supported implementation in PYTHON_COMPAT.";
fi;
local flags=("${impls[@]/#/python_targets_}");
local optflags=${flags[@]/%/(-)?};
local flags_st=("${impls[@]/#/-python_single_target_}");
optflags+=,${flags_st[@]/%/(-)};
IUSE=${flags[*]};
PYTHON_REQUIRED_USE="|| ( ${flags[*]} )";
PYTHON_USEDEP=${optflags// /,};
if [[ ${_PYTHON_WANT_PYTHON_EXEC2} == 0 ]]; then
PYTHON_DEPS+="dev-lang/python-exec:0[${PYTHON_USEDEP}]";
else
if [[ ${EAPI} != 4 ]]; then
PYTHON_DEPS+="dev-lang/python-exec:=[${PYTHON_USEDEP}]";
else
PYTHON_DEPS+="dev-lang/python-exec:2[${PYTHON_USEDEP}]";
fi;
fi
}
_python_validate_useflags ()
{
debug-print-function ${FUNCNAME} "${@}";
local i;
for i in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${i}" || continue;
use "python_targets_${i}" && return 0;
done;
eerror "No Python implementation selected for the build. Please add one";
eerror "of the following values to your PYTHON_TARGETS (in make.conf):";
eerror;
eerror "${PYTHON_COMPAT[@]}";
echo;
die "No supported Python implementation in PYTHON_TARGETS."
}
_python_want_python_exec2 ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${EAPI} == 4 ]] && return 0;
if [[ ! -n ${_PYTHON_WANT_PYTHON_EXEC2+1} ]]; then
has_version 'dev-lang/python-exec:2';
_PYTHON_WANT_PYTHON_EXEC2=$(( ! ${?} ));
fi;
[[ ${_PYTHON_WANT_PYTHON_EXEC2} != 0 ]]
}
_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}"
}
bashpid ()
{
sh -c 'echo ${PPID}'
}
built_with_use ()
{
_eutils_eprefix_init;
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=${EROOT}/var/db/pkg/${PKG}/USE;
local IUSEFILE=${EROOT}/var/db/pkg/${PKG}/IUSE;
if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
case ${missing_action} in
true)
return 0
;;
false)
return 1
;;
die)
die "Unable to determine what USE flags $PKG was built with"
;;
esac;
fi;
if [[ ${hidden} == "no" ]]; then
local IUSE_BUILT=($(<"${IUSEFILE}"));
local expand;
for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
do
if [[ $1 == ${expand}_* ]]; then
expand="";
break;
fi;
done;
if [[ -n ${expand} ]]; then
if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
case ${missing_action} in
true)
return 0
;;
false)
return 1
;;
die)
die "$PKG does not actually support the $1 USE flag!"
;;
esac;
fi;
fi;
fi;
local USE_BUILT=$(<${USEFILE});
while [[ $# -gt 0 ]]; do
if [[ ${opt} = "-o" ]]; then
has $1 ${USE_BUILT} && return 0;
else
has $1 ${USE_BUILT} || return 1;
fi;
shift;
done;
[[ ${opt} = "-a" ]]
}
check_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}"
}
distutils-r1_python_compile ()
{
debug-print-function ${FUNCNAME} "${@}";
_distutils-r1_create_setup_cfg;
_distutils-r1_copy_egg_info;
esetup.py build "${@}"
}
distutils-r1_python_configure ()
{
debug-print-function ${FUNCNAME} "${@}";
:
}
distutils-r1_python_install ()
{
debug-print-function ${FUNCNAME} "${@}";
local args=("${@}");
local -x PYTHONDONTWRITEBYTECODE=;
_distutils-r1_create_setup_cfg;
addpredict "$(python_get_sitedir)";
addpredict /usr/lib/portage/pym;
addpredict /usr/local;
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
local mydistutilsargs=("${mydistutilsargs[@]}");
local scriptdir=${EPREFIX}/usr/bin;
local arg arg_vars;
[[ -n ${mydistutilsargs[@]} ]] && eval arg_vars+=('mydistutilsargs['{0..$(( ${#mydistutilsargs[@]} - 1 ))}']');
[[ -n ${args[@]} ]] && eval arg_vars+=('args['{0..$(( ${#args[@]} - 1 ))}']');
set -- "${arg_vars[@]}";
while [[ -n ${@} ]]; do
local arg_var=${1};
shift;
local a=${!arg_var};
case "${a}" in
--install-scripts=*)
scriptdir=${a#--install-scripts=};
if _python_want_python_exec2; then
unset "${arg_var}";
fi
;;
--install-scripts)
scriptdir=${!1};
if _python_want_python_exec2; then
unset "${arg_var}" "${1}";
fi;
shift
;;
esac;
done;
fi;
local root=${D}/_${EPYTHON};
[[ -n ${DISTUTILS_SINGLE_IMPL} ]] && root=${D};
esetup.py install --root="${root}" "${args[@]}";
if [[ -d ${root}$(python_get_sitedir)/tests ]]; then
die "Package installs 'tests' package, file collisions likely.";
fi;
if [[ -d ${root}/usr/$(get_libdir)/pypy/share ]]; then
die "Package installs 'share' in PyPy prefix, see bug #465546.";
fi;
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
_distutils-r1_wrap_scripts "${root}" "${scriptdir}";
multibuild_merge_root "${root}" "${D}";
fi
}
distutils-r1_python_install_all ()
{
debug-print-function ${FUNCNAME} "${@}";
einstalldocs;
if declare -p EXAMPLES &>/dev/null; then
local INSDESTTREE=/usr/share/doc/${PF}/examples;
doins -r "${EXAMPLES[@]}";
docompress -x "${INSDESTTREE}";
fi;
_DISTUTILS_DEFAULT_CALLED=1
}
distutils-r1_python_prepare ()
{
debug-print-function ${FUNCNAME} "${@}";
:
}
distutils-r1_python_prepare_all ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${PATCHES} ]] && epatch "${PATCHES[@]}";
epatch_user;
if [[ ! -n ${DISTUTILS_IN_SOURCE_BUILD+1} ]]; then
if declare -f python_prepare > /dev/null; then
DISTUTILS_IN_SOURCE_BUILD=1;
fi;
fi;
_distutils-r1_disable_ez_setup;
if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} && ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
python_copy_sources;
fi;
_DISTUTILS_DEFAULT_CALLED=1
}
distutils-r1_run_phase ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} ]]; then
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
pushd "${BUILD_DIR}" > /dev/null || die;
fi;
local BUILD_DIR=${BUILD_DIR}/build;
fi;
local -x PYTHONPATH="${BUILD_DIR}/lib:${PYTHONPATH}";
if [[ ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
local -x TMPDIR=${T}/${EPYTHON};
local -x HOME=${TMPDIR}/home;
mkdir -p "${TMPDIR}" "${HOME}" || die;
fi;
local -x AR=${AR} CC=${CC} CPP=${CPP} CXX=${CXX};
tc-export AR CC CPP CXX;
local ldopts;
case "${CHOST}" in
*-aix*)
ldopts='-shared -Wl,-berok'
;;
*-darwin*)
ldopts='-bundle -undefined dynamic_lookup'
;;
*)
ldopts='-shared'
;;
esac;
local -x LDSHARED="${CC} ${ldopts}" LDCXXSHARED="${CXX} ${ldopts}";
"${@}";
if [[ -n ${DISTUTILS_IN_SOURCE_BUILD} && ! -n ${DISTUTILS_SINGLE_IMPL} ]]; then
popd > /dev/null || die;
fi
}
distutils-r1_src_compile ()
{
debug-print-function ${FUNCNAME} "${@}";
if declare -f python_compile > /dev/null; then
_distutils-r1_run_foreach_impl python_compile;
else
_distutils-r1_run_foreach_impl distutils-r1_python_compile;
fi;
if declare -f python_compile_all > /dev/null; then
_distutils-r1_run_common_phase python_compile_all;
fi
}
distutils-r1_src_configure ()
{
python_export_utf8_locale;
if declare -f python_configure > /dev/null; then
_distutils-r1_run_foreach_impl python_configure;
fi;
if declare -f python_configure_all > /dev/null; then
_distutils-r1_run_common_phase python_configure_all;
fi
}
distutils-r1_src_install ()
{
debug-print-function ${FUNCNAME} "${@}";
if declare -f python_install > /dev/null; then
_distutils-r1_run_foreach_impl python_install;
else
_distutils-r1_run_foreach_impl distutils-r1_python_install;
fi;
local _DISTUTILS_DEFAULT_CALLED;
if declare -f python_install_all > /dev/null; then
_distutils-r1_run_common_phase python_install_all;
else
_distutils-r1_run_common_phase distutils-r1_python_install_all;
fi;
if [[ ! -n ${_DISTUTILS_DEFAULT_CALLED} ]]; then
eqawarn "QA warning: python_install_all() didn't call distutils-r1_python_install_all";
fi
}
distutils-r1_src_prepare ()
{
debug-print-function ${FUNCNAME} "${@}";
local _DISTUTILS_DEFAULT_CALLED;
if declare -f python_prepare_all > /dev/null; then
python_prepare_all;
else
distutils-r1_python_prepare_all;
fi;
if [[ ! -n ${_DISTUTILS_DEFAULT_CALLED} ]]; then
eqawarn "QA warning: python_prepare_all() didn't call distutils-r1_python_prepare_all";
fi;
if declare -f python_prepare > /dev/null; then
_distutils-r1_run_foreach_impl python_prepare;
fi
}
distutils-r1_src_test ()
{
debug-print-function ${FUNCNAME} "${@}";
if declare -f python_test > /dev/null; then
_distutils-r1_run_foreach_impl python_test;
fi;
if declare -f python_test_all > /dev/null; then
_distutils-r1_run_common_phase python_test_all;
fi
}
distutils_install_for_testing ()
{
debug-print-function ${FUNCNAME} "${@}";
TEST_DIR=${BUILD_DIR}/test;
local bindir=${TEST_DIR}/scripts;
local libdir=${TEST_DIR}/lib;
PYTHONPATH=${libdir}:${PYTHONPATH};
local add_args=(install --home="${TEST_DIR}" --install-lib="${libdir}" --install-scripts="${bindir}");
mkdir -p "${libdir}" || die;
esetup.py "${add_args[@]}" "${@}"
}
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
}
einstalldocs ()
{
debug-print-function ${FUNCNAME} "${@}";
local dodoc_opts=-r;
has ${EAPI} 0 1 2 3 && dodoc_opts=;
if ! declare -p DOCS &>/dev/null; then
local d;
for d in README* ChangeLog AUTHORS NEWS TODO CHANGES THANKS BUGS FAQ CREDITS CHANGELOG;
do
if [[ -s ${d} ]]; then
dodoc "${d}" || die;
fi;
done;
else
if [[ $(declare -p DOCS) == "declare -a"* ]]; then
if [[ -n ${DOCS[@]} ]]; then
dodoc ${dodoc_opts} "${DOCS[@]}" || die;
fi;
else
if [[ -n ${DOCS} ]]; then
dodoc ${dodoc_opts} ${DOCS} || die;
fi;
fi;
fi;
if [[ $(declare -p HTML_DOCS 2>/dev/null) == "declare -a"* ]]; then
if [[ -n ${HTML_DOCS[@]} ]]; then
dohtml -r "${HTML_DOCS[@]}" || die;
fi;
else
if [[ -n ${HTML_DOCS} ]]; then
dohtml -r ${HTML_DOCS} || die;
fi;
fi;
return 0
}
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
}
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
evar_push_set LC_COLLATE C;
set -- "$1"/*${EPATCH_SUFFIX:+."${EPATCH_SUFFIX}"};
evar_pop;
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}${EPATCH_USER_EXCLUDE} ]]; then
eshopts_push -o noglob;
local ex;
for ex in ${EPATCH_EXCLUDE};
do
if [[ ${patchname} == ${ex} ]]; then
einfo " Skipping ${patchname} due to EPATCH_EXCLUDE ...";
eshopts_pop;
continue 2;
fi;
done;
for ex in ${EPATCH_USER_EXCLUDE};
do
if [[ ${patchname} == ${ex} ]]; then
einfo " Skipping ${patchname} due to EPATCH_USER_EXCLUDE ...";
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
echo;
eerror "Rejected Patch: ${patchname} !";
eerror " ( ${PATCH_TARGET} )";
eerror;
eerror "Your patch uses relative paths '../':";
eerror "${rel_paths}";
echo;
die "you need to fix the relative paths in patch";
fi;
local patch_cmd;
local patch="patch";
eval $(alias patch 2>/dev/null | sed 's:^alias ::');
while [[ ${count} -lt 5 ]]; do
patch_cmd="${patch} -p${count} ${EPATCH_OPTS}";
( _epatch_draw_line "***** ${patchname} *****";
echo;
echo "PATCH COMMAND: ${patch_cmd} < '${PATCH_TARGET}'";
echo;
_epatch_draw_line "***** ${patchname} *****";
${patch_cmd} --dry-run -f < "${PATCH_TARGET}" 2>&1;
ret=$?;
echo;
echo "patch program exited with status ${ret}";
exit ${ret} ) >> "${STDERR_TARGET}";
if [ $? -eq 0 ]; then
( _epatch_draw_line "***** ${patchname} *****";
echo;
echo "ACTUALLY APPLYING ${patchname} ...";
echo;
_epatch_draw_line "***** ${patchname} *****";
${patch_cmd} < "${PATCH_TARGET}" 2>&1;
ret=$?;
echo;
echo "patch program exited with status ${ret}";
exit ${ret} ) >> "${STDERR_TARGET}";
if [ $? -ne 0 ]; then
echo;
eerror "A dry-run of patch command succeeded, but actually";
eerror "applying the patch failed!";
count=5;
fi;
break;
fi;
: $(( count++ ));
done;
if [[ -n ${PIPE_CMD} ]]; then
rm -f "${PATCH_TARGET}";
fi;
if [[ ${count} -ge 5 ]]; then
echo;
eerror "Failed Patch: ${patchname} !";
eerror " ( ${PATCH_TARGET} )";
eerror;
eerror "Include in your bugreport the contents of:";
eerror;
eerror " ${STDERR_TARGET}";
echo;
die "Failed Patch: ${patchname}!";
fi;
rm -f "${STDERR_TARGET}";
cat >> "${T}/epatch.log" <<-EOF
PATCH: ${x}
CMD: ${patch_cmd}
PWD: ${PWD}
EOF
eend 0;
done;
[[ ${SINGLE_PATCH} == "no" ]] && einfo "Done with patching";
:
}
epatch_user ()
{
[[ $# -ne 0 ]] && die "epatch_user takes no options";
local applied="${T}/epatch_user.log";
[[ -e ${applied} ]] && return 2;
local EPATCH_SOURCE check base=${PORTAGE_CONFIGROOT%/}/etc/portage/patches;
for check in ${CATEGORY}/{${P}-${PR},${P},${PN}}{,:${SLOT}};
do
EPATCH_SOURCE=${base}/${CTARGET}/${check};
[[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${CHOST}/${check};
[[ -r ${EPATCH_SOURCE} ]] || EPATCH_SOURCE=${base}/${check};
if [[ -d ${EPATCH_SOURCE} ]]; then
EPATCH_SOURCE=${EPATCH_SOURCE} EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" EPATCH_MULTI_MSG="Applying user patches from ${EPATCH_SOURCE} ..." epatch;
echo "${EPATCH_SOURCE}" > "${applied}";
return 0;
fi;
done;
echo "none" > "${applied}";
return 1
}
epause ()
{
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 p any_found;
while IFS= read -r -d '' f; do
for p in "${PORTDIR}"/eclass/ELT-patches/nocxx/*.patch;
do
if patch --no-backup-if-mismatch -p1 "${f}" "${p}" > /dev/null; then
any_found=1;
break;
fi;
done;
done < <(find "${dir}" -name configure -print0);
if [[ -z ${any_found} ]]; then
eqawarn "epunt_cxx called unnecessarily (no C++ checks to punt).";
fi;
eend 0
}
esetup.py ()
{
debug-print-function ${FUNCNAME} "${@}";
set -- "${PYTHON:-python}" setup.py "${mydistutilsargs[@]}" "${@}";
echo "${@}" 1>&2;
"${@}" || die
}
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: $*"
}
evar_pop ()
{
local cnt=${1:-bad};
case $# in
0)
cnt=1
;;
1)
isdigit "${cnt}" || die "${FUNCNAME}: first arg must be a number: $*"
;;
*)
die "${FUNCNAME}: only accepts one arg: $*"
;;
esac;
local var val;
while (( cnt-- )); do
estack_pop evar val || die "${FUNCNAME}: unbalanced push";
estack_pop evar var || die "${FUNCNAME}: unbalanced push";
[[ ${val} == "unset_76fc3c462065bb4ca959f939e6793f94" ]] && unset ${var} || printf -v "${var}" '%s' "${val}";
done
}
evar_push ()
{
local var val;
for var in "$@";
do
[[ ${!var+set} == "set" ]] && val=${!var} || val="unset_76fc3c462065bb4ca959f939e6793f94";
estack_push evar "${var}" "${val}";
done
}
evar_push_set ()
{
local var=$1;
evar_push ${var};
case $# in
1)
unset ${var}
;;
2)
printf -v "${var}" '%s' "$2"
;;
*)
die "${FUNCNAME}: incorrect # of args: $*"
;;
esac
}
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);
[[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]]
}
gcc-specs-now ()
{
local directive;
directive=$(gcc-specs-directive link_command);
[[ "${directive/\{!nonow:}" != "${directive}" ]]
}
gcc-specs-pie ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/\{!nopie:}" != "${directive}" ]]
}
gcc-specs-relro ()
{
local directive;
directive=$(gcc-specs-directive link_command);
[[ "${directive/\{!norelro:}" != "${directive}" ]]
}
gcc-specs-ssp ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]]
}
gcc-specs-ssp-to-all ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]]
}
gcc-specs-stack-check ()
{
local directive;
directive=$(gcc-specs-directive cc1);
[[ "${directive/\{!fno-stack-check:}" != "${directive}" ]]
}
gcc-version ()
{
_gcc_fullversion '$1.$2' "$@"
}
gen_usr_ldscript ()
{
local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
[[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
tc-is-static-only && return;
case ${CTARGET:-${CHOST}} in
*-darwin*)
;;
*linux* | *-freebsd* | *-openbsd* | *-netbsd*)
use prefix && return 0
;;
*)
return 0
;;
esac;
dodir /usr/${libdir};
if [[ $1 == "-a" ]]; then
auto=true;
shift;
dodir /${libdir};
fi;
local flags=(${CFLAGS} ${LDFLAGS} -Wl,--verbose);
if $(tc-getLD) --version | grep -q 'GNU gold'; then
local d="${T}/bfd-linker";
mkdir -p "${d}";
ln -sf $(which ${CHOST}-ld.bfd) "${d}"/ld;
flags+=(-B"${d}");
fi;
output_format=$($(tc-getCC) "${flags[@]}" 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
[[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
for lib in "$@";
do
local tlib;
if ${auto}; then
lib="lib${lib}${suffix}";
else
[[ -r ${ED}/${libdir}/${lib} ]] || continue;
fi;
case ${CTARGET:-${CHOST}} in
*-darwin*)
if ${auto}; then
tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
else
tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
fi;
[[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
tlib=${tlib##*/};
if ${auto}; then
mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
if [[ ${tlib} != ${lib%${suffix}}.*${suffix#.} ]]; then
mv "${ED}"/usr/${libdir}/${tlib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
fi;
rm -f "${ED}"/${libdir}/${lib};
fi;
if [[ ! -w "${ED}/${libdir}/${tlib}" ]]; then
chmod u+w "${ED}${libdir}/${tlib}";
local nowrite=yes;
fi;
install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib} || die "install_name_tool failed";
[[ -n ${nowrite} ]] && chmod u-w "${ED}${libdir}/${tlib}";
pushd "${ED}/usr/${libdir}" > /dev/null;
ln -snf "../../${libdir}/${tlib}" "${lib}";
popd > /dev/null
;;
*)
if ${auto}; then
tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
[[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
if [[ ${tlib} != ${lib}* ]]; then
mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
fi;
rm -f "${ED}"/${libdir}/${lib};
else
tlib=${lib};
fi;
cat > "${ED}/usr/${libdir}/${lib}" <<-END_LDSCRIPT
/* GNU ld script
Since Gentoo has critical dynamic libraries in /lib, and the static versions
in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
run into linking problems. This "fake" dynamic lib is a linker script that
redirects the linker to the real lib. And yes, this works in the cross-
compiling scenario as the sysroot-ed linker will prepend the real path.
See bug http://bugs.gentoo.org/4411 for more info.
*/
${output_format}
GROUP ( ${EPREFIX}/${libdir}/${tlib} )
END_LDSCRIPT
;;
esac
fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
done
}
get_abi_CFLAGS ()
{
get_abi_var CFLAGS "$@"
}
get_abi_CHOST ()
{
get_abi_var CHOST "$@"
}
get_abi_CTARGET ()
{
get_abi_var CTARGET "$@"
}
get_abi_FAKE_TARGETS ()
{
get_abi_var FAKE_TARGETS "$@"
}
get_abi_LDFLAGS ()
{
get_abi_var LDFLAGS "$@"
}
get_abi_LIBDIR ()
{
get_abi_var LIBDIR "$@"
}
get_abi_var ()
{
local flag=$1;
local abi=${2:-${ABI:-${DEFAULT_ABI:-default}}};
local var="${flag}_${abi}";
echo ${!var}
}
get_after_major_version ()
{
echo $(get_version_component_range 2- "${1:-${PV}}")
}
get_all_abis ()
{
local x order="" mvar dvar;
mvar="MULTILIB_ABIS";
dvar="DEFAULT_ABI";
if [[ -n $1 ]]; then
mvar="$1_${mvar}";
dvar="$1_${dvar}";
fi;
if [[ -z ${!mvar} ]]; then
echo "default";
return 0;
fi;
for x in ${!mvar};
do
if [[ ${x} != ${!dvar} ]]; then
order="${order:+${order} }${x}";
fi;
done;
order="${order:+${order} }${!dvar}";
echo ${order};
return 0
}
get_all_libdirs ()
{
local libdirs abi;
for abi in ${MULTILIB_ABIS};
do
libdirs+=" $(get_abi_LIBDIR ${abi})";
done;
[[ " ${libdirs} " != *" lib "* ]] && libdirs+=" lib";
echo "${libdirs}"
}
get_all_version_components ()
{
eshopts_push -s extglob;
local ver_str=${1:-${PV}} result;
result=();
if [[ ${VERSIONATOR_CACHE_VER_STR} == ${ver_str} ]]; then
echo ${VERSIONATOR_CACHE_RESULT};
eshopts_pop;
return;
fi;
export VERSIONATOR_CACHE_VER_STR=${ver_str};
while [[ -n $ver_str ]]; do
case "${ver_str::1}" in
[[:digit:]])
result+=("${ver_str%%[^[:digit:]]*}");
ver_str=${ver_str##+([[:digit:]])}
;;
[-_.])
result+=("${ver_str::1}");
ver_str=${ver_str:1}
;;
[[:alpha:]])
local not_match=${ver_str##+([[:alpha:]])*([[:digit:]])};
result+=("${ver_str::${#ver_str} - ${#not_match}}");
ver_str=${not_match}
;;
*)
result+=("${ver_str::1}");
ver_str=${ver_str:1}
;;
esac;
done;
export VERSIONATOR_CACHE_RESULT=${result[*]};
echo ${result[@]};
eshopts_pop
}
get_install_abis ()
{
local x order="";
if [[ -z ${MULTILIB_ABIS} ]]; then
echo "default";
return 0;
fi;
if [[ ${EMULTILIB_PKG} == "true" ]]; then
for x in ${MULTILIB_ABIS};
do
if [[ ${x} != "${DEFAULT_ABI}" ]]; then
has ${x} ${ABI_DENY} || order="${order} ${x}";
fi;
done;
has ${DEFAULT_ABI} ${ABI_DENY} || order="${order} ${DEFAULT_ABI}";
if [[ -n ${ABI_ALLOW} ]]; then
local ordera="";
for x in ${order};
do
if has ${x} ${ABI_ALLOW}; then
ordera="${ordera} ${x}";
fi;
done;
order=${ordera};
fi;
else
order=${DEFAULT_ABI};
fi;
if [[ -z ${order} ]]; then
die "The ABI list is empty. Are you using a proper multilib profile? Perhaps your USE flags or MULTILIB_ABIS are too restrictive for this package.";
fi;
echo ${order};
return 0
}
get_last_version_component_index ()
{
echo $(($(get_version_component_count "${1:-${PV}}" ) - 1))
}
get_libdir ()
{
local CONF_LIBDIR;
if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
echo ${CONF_LIBDIR_OVERRIDE};
else
get_abi_LIBDIR;
fi
}
get_libname ()
{
local libname;
local ver=$1;
case ${CHOST} in
*-cygwin | mingw* | *-mingw*)
libname="dll"
;;
*-darwin*)
libname="dylib"
;;
*-mint*)
libname="irrelevant"
;;
hppa*-hpux*)
libname="sl"
;;
*)
libname="so"
;;
esac;
if [[ -z $* ]]; then
echo ".${libname}";
else
for ver in "$@";
do
case ${CHOST} in
*-darwin*)
echo ".${ver}.${libname}"
;;
*-mint*)
echo ".${libname}"
;;
*)
echo ".${libname}.${ver}"
;;
esac;
done;
fi
}
get_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//[-._]/ }
}
has_multilib_profile ()
{
[ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
}
in_iuse ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${#} -eq 1 ]] || die "Invalid args to ${FUNCNAME}()";
local flag=${1};
local liuse=(${IUSE});
has "${flag}" "${liuse[@]#[+-]}"
}
is_final_abi ()
{
has_multilib_profile || return 0;
set -- $(get_install_abis);
local LAST_ABI=$#;
[[ ${!LAST_ABI} == ${ABI} ]]
}
isdigit ()
{
local d;
for d in "$@";
do
[[ ${d:-bad} == *[!0-9]* ]] && return 1;
done;
return 0
}
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;
local slot=${SLOT%/*};
if [[ ${slot} == "0" ]]; then
local desktop_name="${PN}";
else
local desktop_name="${PN}-${slot}";
fi;
local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
type=${type%;}${type:+;};
eshopts_push -s extglob;
if [[ -n ${icon} && ${icon} != /* ]] && [[ ${icon} == *.xpm || ${icon} == *.png || ${icon} == *.svg ]]; then
ewarn "As described in the Icon Theme Specification, icon file extensions are not";
ewarn "allowed in .desktop files if the value is not an absolute path.";
icon=${icon%.@(xpm|png|svg)};
fi;
eshopts_pop;
cat > "${desktop}" <<-EOF
[Desktop Entry]
Name=${name}
Type=Application
Comment=${DESCRIPTION}
Exec=${exec}
TryExec=${exec%% *}
Icon=${icon}
Categories=${type}
EOF
if [[ ${fields:-=} != *=* ]]; then
ewarn "make_desktop_entry: update your 5th arg to read Path=${fields}";
fields="Path=${fields}";
fi;
[[ -n ${fields} ]] && printf '%b\n' "${fields}" >> "${desktop}";
( insinto /usr/share/applications;
doins "${desktop}" ) || die "installing desktop file failed"
}
make_session_desktop ()
{
[[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
[[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
local title=$1;
local command=$2;
local desktop=${T}/${wm:-${PN}}.desktop;
shift 2;
cat > "${desktop}" <<-EOF
[Desktop Entry]
Name=${title}
Comment=This session logs you into ${title}
Exec=${command} $*
TryExec=${command}
Type=XSession
EOF
( insinto /usr/share/xsessions;
doins "${desktop}" )
}
make_wrapper ()
{
_eutils_eprefix_init;
local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
local tmpwrapper=$(emktemp);
( echo '#!/bin/sh';
[[ -n ${chdir} ]] && printf 'cd "%s"\n' "${EPREFIX}${chdir}";
if [[ -n ${libdir} ]]; then
local var;
if [[ ${CHOST} == *-darwin* ]]; then
var=DYLD_LIBRARY_PATH;
else
var=LD_LIBRARY_PATH;
fi;
cat <<-EOF
if [ "\${${var}+set}" = "set" ] ; then
export ${var}="\${${var}}:${EPREFIX}${libdir}"
else
export ${var}="${EPREFIX}${libdir}"
fi
EOF
fi
printf 'exec %s "$@"\n' "${bin/#\//${EPREFIX}/}" ) > "${tmpwrapper}";
chmod go+rx "${tmpwrapper}";
if [[ -n ${path} ]]; then
( exeinto "${path}";
newexe "${tmpwrapper}" "${wrapper}" ) || die;
else
newbin "${tmpwrapper}" "${wrapper}" || die;
fi
}
makeopts_jobs ()
{
[[ $# -eq 0 ]] && set -- ${MAKEOPTS};
local jobs=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-j|--jobs[=[:space:]])[[:space:]]*([0-9]+).*:\2:p' -e 's:.*[[:space:]](-j|--jobs)[[:space:]].*:999:p');
echo ${jobs:-1}
}
makeopts_loadavg ()
{
[[ $# -eq 0 ]] && set -- ${MAKEOPTS};
local lavg=$(echo " $* " | sed -r -n -e 's:.*[[:space:]](-l|--load-average[=[:space:]])[[:space:]]*([0-9]+|[0-9]+\.[0-9]+)[^0-9.]*:\2:p' -e 's:.*[[:space:]](-l|--load-average)[[:space:]].*:999:p');
echo ${lavg:-1}
}
multibuild_copy_sources ()
{
debug-print-function ${FUNCNAME} "${@}";
local _MULTIBUILD_INITIAL_BUILD_DIR=${BUILD_DIR:-${S}};
einfo "Will copy sources from ${_MULTIBUILD_INITIAL_BUILD_DIR}";
local cp_args=();
if cp --reflink=auto --version &>/dev/null; then
cp_args+=(--reflink=auto);
fi;
function _multibuild_create_source_copy ()
{
einfo "${MULTIBUILD_VARIANT}: copying to ${BUILD_DIR}";
cp -pr "${cp_args[@]}" "${_MULTIBUILD_INITIAL_BUILD_DIR}" "${BUILD_DIR}" || die
};
multibuild_foreach_variant _multibuild_create_source_copy
}
multibuild_for_best_variant ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
local MULTIBUILD_VARIANTS=("${MULTIBUILD_VARIANTS[$(( ${#MULTIBUILD_VARIANTS[@]} - 1 ))]}");
multibuild_foreach_variant "${@}"
}
multibuild_foreach_variant ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${MULTIBUILD_VARIANTS} ]] || die "MULTIBUILD_VARIANTS need to be set";
local bdir=${BUILD_DIR:-${S}};
[[ ${bdir%%/} == ${WORKDIR%%/} ]] && bdir=${WORKDIR}/build;
local prev_id=${MULTIBUILD_ID:+${MULTIBUILD_ID}-};
local ret=0 lret=0 v;
debug-print "${FUNCNAME}: initial build_dir = ${bdir}";
for v in "${MULTIBUILD_VARIANTS[@]}";
do
local MULTIBUILD_VARIANT=${v};
local MULTIBUILD_ID=${prev_id}${v};
local BUILD_DIR=${bdir%%/}-${v};
function _multibuild_run ()
{
local i=1;
while [[ ${!i} == _* ]]; do
(( i += 1 ));
done;
[[ ${i} -le ${#} ]] && einfo "${v}: running ${@:${i}}";
"${@}"
};
_multibuild_run "${@}" > >(exec tee -a "${T}/build-${MULTIBUILD_ID}.log") 2>&1;
lret=${?};
done;
[[ ${ret} -eq 0 && ${lret} -ne 0 ]] && ret=${lret};
return ${ret}
}
multibuild_merge_root ()
{
local src=${1};
local dest=${2};
local lockfile=${T}/.multibuild_merge_lock;
local lockfile_l=${lockfile}.${BASHPID};
local ret;
touch "${lockfile_l}" || die;
until ln "${lockfile_l}" "${lockfile}" &>/dev/null; do
sleep 1;
done;
rm "${lockfile_l}" || die;
if use userland_BSD; then
tar -C "${src}" -f - -c . | tar -x -f - -C "${dest}";
[[ ${PIPESTATUS[*]} == '0 0' ]];
ret=${?};
else
local cp_args=();
if cp -a --version &>/dev/null; then
cp_args+=(-a);
else
cp_args+=(-P -R -p);
fi;
if cp --reflink=auto --version &>/dev/null; then
cp_args+=(--reflink=auto);
fi;
cp "${cp_args[@]}" "${src}"/. "${dest}"/;
ret=${?};
fi;
rm "${lockfile}" || die;
if [[ ${ret} -ne 0 ]]; then
die "${MULTIBUILD_VARIANT:-(unknown)}: merging image failed.";
fi;
rm -rf "${src}"
}
multibuild_parallel_foreach_variant ()
{
debug-print-function ${FUNCNAME} "${@}";
local ret lret;
function _multibuild_parallel ()
{
( multijob_child_init;
"${@}" ) & multijob_post_fork
};
local opts;
if [[ -n ${MULTIBUILD_JOBS} ]]; then
opts=-j${MULTIBUILD_JOBS};
else
opts=${MAKEOPTS};
fi;
multijob_init "${opts}";
multibuild_foreach_variant _multibuild_parallel "${@}";
ret=${?};
multijob_finish;
lret=${?};
[[ ${ret} -eq 0 ]] && ret=${lret};
return ${ret}
}
multijob_child_init ()
{
local mode="pre";
case $1 in
--pre)
mode="pre";
shift
;;
--post)
mode="post";
shift
;;
esac;
if [[ $# -eq 0 ]]; then
trap 'echo ${BASHPID:-$(bashpid)} $? >&'${mj_write_fd} EXIT;
trap 'exit 1' INT TERM;
else
local ret;
[[ ${mode} == "pre" ]] && {
multijob_pre_fork;
ret=$?
};
( multijob_child_init;
"$@" ) & [[ ${mode} == "post" ]] && {
multijob_post_fork;
ret=$?
};
return ${ret};
fi
}
multijob_finish ()
{
local ret=0;
while [[ ${mj_num_jobs} -gt 0 ]]; do
multijob_finish_one;
: $(( ret |= $? ));
done;
wait;
[[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments";
EBUILD_DEATH_HOOKS=${EBUILD_DEATH_HOOKS/ wait / };
return ${ret}
}
multijob_finish_one ()
{
[[ $# -eq 0 ]] || die "${FUNCNAME} takes no arguments";
local pid ret;
read -r -u ${mj_read_fd} pid ret || die;
: $(( --mj_num_jobs ));
return ${ret}
}
multijob_init ()
{
has wait ${EBUILD_DEATH_HOOKS} || EBUILD_DEATH_HOOKS+=" wait ";
local pipe="${T}/multijob.pipe";
mkfifo -m 600 "${pipe}";
redirect_alloc_fd mj_write_fd "${pipe}";
redirect_alloc_fd mj_read_fd "${pipe}";
rm -f "${pipe}";
mj_max_jobs=$(makeopts_jobs "$@");
mj_num_jobs=0
}
multijob_post_fork ()
{
_multijob_fork post "$@"
}
multijob_pre_fork ()
{
_multijob_fork pre "$@"
}
multilib_env ()
{
local CTARGET=${1:-${CTARGET}};
local cpu=${CTARGET%%*-};
case ${cpu} in
aarch64*)
export CFLAGS_arm=${CFLAGS_arm-};
case ${cpu} in
aarch64*be)
export CHOST_arm="armv8b-${CTARGET#*-}"
;;
*)
export CHOST_arm="armv8l-${CTARGET#*-}"
;;
esac;
CHOST_arm=${CHOST_arm/%-gnu/-gnueabi};
export CTARGET_arm=${CHOST_arm};
export LIBDIR_arm="lib";
export CFLAGS_arm64=${CFLAGS_arm64-};
export CHOST_arm64=${CTARGET};
export CTARGET_arm64=${CHOST_arm64};
export LIBDIR_arm64="lib64";
: ${MULTILIB_ABIS=arm64};
: ${DEFAULT_ABI=arm64}
;;
x86_64*)
export CFLAGS_x86=${CFLAGS_x86--m32};
export CHOST_x86=${CTARGET/x86_64/i686};
CHOST_x86=${CHOST_x86/%-gnux32/-gnu};
export CTARGET_x86=${CHOST_x86};
if [[ ${SYMLINK_LIB} == "yes" ]]; then
export LIBDIR_x86="lib32";
else
export LIBDIR_x86="lib";
fi;
export CFLAGS_amd64=${CFLAGS_amd64--m64};
export CHOST_amd64=${CTARGET/%-gnux32/-gnu};
export CTARGET_amd64=${CHOST_amd64};
export LIBDIR_amd64="lib64";
export CFLAGS_x32=${CFLAGS_x32--mx32};
export CHOST_x32=${CTARGET/%-gnu/-gnux32};
export CTARGET_x32=${CHOST_x32};
export LIBDIR_x32="libx32";
case ${CTARGET} in
*-gnux32)
: ${MULTILIB_ABIS=x32 amd64 x86};
: ${DEFAULT_ABI=x32}
;;
*)
: ${MULTILIB_ABIS=amd64 x86};
: ${DEFAULT_ABI=amd64}
;;
esac
;;
mips64*)
export CFLAGS_o32=${CFLAGS_o32--mabi=32};
export CHOST_o32=${CTARGET/mips64/mips};
export CTARGET_o32=${CHOST_o32};
export LIBDIR_o32="lib";
export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
export CHOST_n32=${CTARGET};
export CTARGET_n32=${CHOST_n32};
export LIBDIR_n32="lib32";
export CFLAGS_n64=${CFLAGS_n64--mabi=64};
export CHOST_n64=${CTARGET};
export CTARGET_n64=${CHOST_n64};
export LIBDIR_n64="lib64";
: ${MULTILIB_ABIS=n64 n32 o32};
: ${DEFAULT_ABI=n32}
;;
powerpc64*)
export CFLAGS_ppc=${CFLAGS_ppc--m32};
export CHOST_ppc=${CTARGET/powerpc64/powerpc};
export CTARGET_ppc=${CHOST_ppc};
export LIBDIR_ppc="lib";
export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
export CHOST_ppc64=${CTARGET};
export CTARGET_ppc64=${CHOST_ppc64};
export LIBDIR_ppc64="lib64";
: ${MULTILIB_ABIS=ppc64 ppc};
: ${DEFAULT_ABI=ppc64}
;;
s390x*)
export CFLAGS_s390=${CFLAGS_s390--m31};
export CHOST_s390=${CTARGET/s390x/s390};
export CTARGET_s390=${CHOST_s390};
export LIBDIR_s390="lib";
export CFLAGS_s390x=${CFLAGS_s390x--m64};
export CHOST_s390x=${CTARGET};
export CTARGET_s390x=${CHOST_s390x};
export LIBDIR_s390x="lib64";
: ${MULTILIB_ABIS=s390x s390};
: ${DEFAULT_ABI=s390x}
;;
sparc64*)
export CFLAGS_sparc32=${CFLAGS_sparc32--m32};
export CHOST_sparc32=${CTARGET/sparc64/sparc};
export CTARGET_sparc32=${CHOST_sparc32};
export LIBDIR_sparc32="lib";
export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
export CHOST_sparc64=${CTARGET};
export CTARGET_sparc64=${CHOST_sparc64};
export LIBDIR_sparc64="lib64";
: ${MULTILIB_ABIS=sparc64 sparc32};
: ${DEFAULT_ABI=sparc64}
;;
*)
: ${MULTILIB_ABIS=default};
: ${DEFAULT_ABI=default}
;;
esac;
export MULTILIB_ABIS DEFAULT_ABI
}
multilib_toolchain_setup ()
{
local v vv;
export ABI=$1;
if [[ ${_DEFAULT_ABI_SAVED} == "true" ]]; then
for v in CHOST CBUILD AS CC CXX LD PKG_CONFIG_{LIBDIR,PATH};
do
vv="_abi_saved_${v}";
[[ ${!vv+set} == "set" ]] && export ${v}="${!vv}" || unset ${v};
unset ${vv};
done;
unset _DEFAULT_ABI_SAVED;
fi;
if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
for v in CHOST CBUILD AS CC CXX LD PKG_CONFIG_{LIBDIR,PATH};
do
vv="_abi_saved_${v}";
[[ ${!v+set} == "set" ]] && export ${vv}="${!v}" || unset ${vv};
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);
export PKG_CONFIG_LIBDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig;
export PKG_CONFIG_PATH=${EPREFIX}/usr/share/pkgconfig;
fi
}
newicon ()
{
_iconins ${FUNCNAME} "$@"
}
newmenu ()
{
( insinto /usr/share/applications;
newins "$@" )
}
number_abis ()
{
set -- `get_install_abis`;
echo $#
}
optfeature ()
{
debug-print-function ${FUNCNAME} "$@";
local i j msg;
local desc=$1;
local flag=0;
shift;
for i in "$@";
do
for j in ${i};
do
if has_version "${j}"; then
flag=1;
else
flag=0;
break;
fi;
done;
if [[ ${flag} -eq 1 ]]; then
break;
fi;
done;
if [[ ${flag} -eq 0 ]]; then
for i in "$@";
do
msg=" ";
for j in ${i};
do
msg+=" ${j} and";
done;
msg="${msg:0: -4} for ${desc}";
elog "${msg}";
done;
fi
}
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 ()
{
if ! use html; then
ewarn "You haven't requested the html documentation.";
ewarn "The html version of the sage manual won't be available in the sage notebook.";
fi;
einfo "We no longer support generating the pdf version of the documentation.";
einfo "Aside from a long list of dependencies it is currently broken with the";
einfo "latest version of sphinx. If you want the pdf you can always download";
einfo "the version produced upstream at:";
einfo "http://sagemath.org/doc-bz2/sage-${PV}-doc-pdf.tar.bz2";
einfo "Note that on one occasion it took three weeks for upstream to produce";
einfo "their own pdf files."
}
preserve_old_lib ()
{
_eutils_eprefix_init;
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 ${EROOT}/${lib} ]] || continue;
dir=${lib%/*};
dodir ${dir} || die "dodir ${dir} failed";
cp "${EROOT}"/${lib} "${ED}"/${lib} || die "cp ${lib} failed";
touch "${ED}"/${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;
_eutils_eprefix_init;
local lib notice=0;
for lib in "$@";
do
[[ -e ${EROOT}/${lib} ]] || continue;
if [[ ${notice} -eq 0 ]]; then
notice=1;
ewarn "Old versions of installed libraries were detected on your system.";
ewarn "In order to avoid breaking packages that depend on these old libs,";
ewarn "the libraries are not being removed. You need to run revdep-rebuild";
ewarn "in order to remove these old dependencies. If you do not have this";
ewarn "helper program, simply emerge the 'gentoolkit' package.";
ewarn;
fi;
ewarn " # revdep-rebuild --library '${lib}' && rm '${lib}'";
done
}
prune_libtool_files ()
{
debug-print-function ${FUNCNAME} "$@";
local removing_all removing_modules opt;
_eutils_eprefix_init;
for opt in "$@";
do
case "${opt}" in
--all)
removing_all=1;
removing_modules=1
;;
--modules)
removing_modules=1
;;
*)
die "Invalid argument to ${FUNCNAME}(): ${opt}"
;;
esac;
done;
local f;
local queue=();
while IFS= read -r -d '' f; do
local archivefile=${f/%.la/.a};
if ! sed -n -e '/^# Generated by .*libtool/q0;4q1' "${f}"; then
continue;
fi;
[[ ${f} != ${archivefile} ]] || die 'regex sanity check failed';
local reason pkgconfig_scanned;
local snotlink=$(sed -n -e 's:^shouldnotlink=::p' "${f}");
if [[ ${snotlink} == yes ]]; then
if [[ -f ${archivefile} ]]; then
einfo "Removing unnecessary ${archivefile#${D%/}} (static plugin)";
queue+=("${archivefile}");
fi;
if [[ -n ${removing_modules} ]]; then
reason='module';
fi;
else
if [[ -n ${removing_all} ]]; then
reason='requested';
else
if [[ ! -f ${archivefile} ]]; then
reason='no static archive';
else
if [[ ! -n $(sed -nre "s/^(dependency_libs|inherited_linker_flags)='(.*)'$/\2/p" "${f}") ]]; then
reason='no libs & flags';
else
if [[ ! -n ${pkgconfig_scanned} ]]; then
local pc_libs=();
if [[ ! -n ${removing_all} ]]; then
local pc;
local tf=${T}/prune-lt-files.pc;
local pkgconf=$(tc-getPKG_CONFIG);
while IFS= read -r -d '' pc; do
local arg libs;
if ${pkgconf} --exists "${pc}" &>/dev/null; then
sed -e '/^Requires:/d' "${pc}" > "${tf}";
libs=$(${pkgconf} --libs "${tf}");
else
libs=$(sed -ne 's/^Libs://p' "${pc}");
fi;
for arg in ${libs};
do
if [[ ${arg} == -l* ]]; then
if [[ ${arg} == '*$*' ]]; then
eqawarn "${FUNCNAME}: variable substitution likely failed in ${pc}";
eqawarn "(arg: ${arg})";
eqawarn "Most likely, you need to add virtual/pkgconfig to DEPEND.";
fi;
pc_libs+=(lib${arg#-l}.la);
fi;
done;
done < <(find "${D}" -type f -name '*.pc' -print0);
rm -f "${tf}";
fi;
pkgconfig_scanned=1;
fi;
has "${f##*/}" "${pc_libs[@]}" && reason='covered by .pc';
fi;
fi;
fi;
fi;
if [[ -n ${reason} ]]; then
einfo "Removing unnecessary ${f#${D%/}} (${reason})";
queue+=("${f}");
fi;
done < <(find "${ED}" -xtype f -name '*.la' -print0);
if [[ -n ${queue[@]} ]]; then
rm -f "${queue[@]}";
fi
}
python_compile ()
{
export SAGE_DOC="${S}"/doc;
export SAGE_SRC="${S}";
export SAGE_NUM_THREADS=$(makeopts_jobs);
export SAGE_DOC_MATHJAX=yes;
export VARTEXFONTS="${T}"/fonts;
if use html; then
${PYTHON} doc/common/builder.py --no-pdf-links all html || die "failed to produce html doc";
touch doc/output/html/en/__init__.py;
fi
}
python_copy_sources ()
{
debug-print-function ${FUNCNAME} "${@}";
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_copy_sources
}
python_doexe ()
{
debug-print-function ${FUNCNAME} "${@}";
local f;
for f in "$@";
do
python_newexe "${f}" "${f##*/}";
done
}
python_doheader ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local d PYTHON_INCLUDEDIR=${PYTHON_INCLUDEDIR};
[[ -n ${PYTHON_INCLUDEDIR} ]] || python_export PYTHON_INCLUDEDIR;
d=${PYTHON_INCLUDEDIR#${EPREFIX}};
local INSDESTTREE;
insinto "${d}";
doins -r "${@}" || die
}
python_domodule ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local d;
if [[ ${python_moduleroot} == /* ]]; then
d=${python_moduleroot};
else
local PYTHON_SITEDIR=${PYTHON_SITEDIR};
[[ -n ${PYTHON_SITEDIR} ]] || python_export PYTHON_SITEDIR;
d=${PYTHON_SITEDIR#${EPREFIX}}/${python_moduleroot};
fi;
local INSDESTTREE;
insinto "${d}";
doins -r "${@}" || die;
python_optimize "${ED}/${d}"
}
python_doscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_doexe "${@}"
}
python_export ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl var;
case "${1}" in
python* | jython*)
impl=${1/_/.};
shift
;;
pypy | pypy3)
impl=${1};
shift
;;
*)
impl=${EPYTHON};
if [[ -z ${impl} ]]; then
die "python_export called without a python implementation and EPYTHON is unset";
fi
;;
esac;
debug-print "${FUNCNAME}: implementation: ${impl}";
for var in "$@";
do
case "${var}" in
EPYTHON)
export EPYTHON=${impl};
debug-print "${FUNCNAME}: EPYTHON = ${EPYTHON}"
;;
PYTHON)
export PYTHON=${EPREFIX}/usr/bin/${impl};
debug-print "${FUNCNAME}: PYTHON = ${PYTHON}"
;;
PYTHON_SITEDIR)
local dir;
case "${impl}" in
python* | pypy | pypy3)
dir=/usr/$(get_libdir)/${impl}
;;
jython*)
dir=/usr/share/${impl/n/n-}/Lib
;;
esac;
export PYTHON_SITEDIR=${EPREFIX}${dir}/site-packages;
debug-print "${FUNCNAME}: PYTHON_SITEDIR = ${PYTHON_SITEDIR}"
;;
PYTHON_INCLUDEDIR)
local dir;
case "${impl}" in
python*)
dir=/usr/include/${impl}
;;
pypy | pypy3)
dir=/usr/$(get_libdir)/${impl}/include
;;
*)
die "${impl} lacks header files"
;;
esac;
export PYTHON_INCLUDEDIR=${EPREFIX}${dir};
debug-print "${FUNCNAME}: PYTHON_INCLUDEDIR = ${PYTHON_INCLUDEDIR}"
;;
PYTHON_LIBPATH)
local libname;
case "${impl}" in
python*)
libname=lib${impl}
;;
*)
die "${impl} lacks a dynamic library"
;;
esac;
local path=${EPREFIX}/usr/$(get_libdir);
export PYTHON_LIBPATH=${path}/${libname}$(get_libname);
debug-print "${FUNCNAME}: PYTHON_LIBPATH = ${PYTHON_LIBPATH}"
;;
PYTHON_CFLAGS)
local val;
case "${impl}" in
python*)
val=$($(tc-getPKG_CONFIG) --cflags ${impl/n/n-})
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_CFLAGS=${val};
debug-print "${FUNCNAME}: PYTHON_CFLAGS = ${PYTHON_CFLAGS}"
;;
PYTHON_LIBS)
local val;
case "${impl}" in
python*)
val=$($(tc-getPKG_CONFIG) --libs ${impl/n/n-})
;;
*)
die "${impl}: obtaining ${var} not supported"
;;
esac;
export PYTHON_LIBS=${val};
debug-print "${FUNCNAME}: PYTHON_LIBS = ${PYTHON_LIBS}"
;;
PYTHON_PKG_DEP)
local d;
case ${impl} in
python2.7)
PYTHON_PKG_DEP='>=dev-lang/python-2.7.5-r2:2.7'
;;
python3.2)
PYTHON_PKG_DEP='>=dev-lang/python-3.2.5-r2:3.2'
;;
python3.3)
PYTHON_PKG_DEP='>=dev-lang/python-3.3.2-r2:3.3'
;;
python*)
PYTHON_PKG_DEP="dev-lang/python:${impl#python}"
;;
pypy)
PYTHON_PKG_DEP='virtual/pypy:0='
;;
pypy3)
PYTHON_PKG_DEP='virtual/pypy3:0='
;;
jython2.5)
PYTHON_PKG_DEP='>=dev-java/jython-2.5.3-r2:2.5'
;;
jython2.7)
PYTHON_PKG_DEP='dev-java/jython:2.7'
;;
*)
die "Invalid implementation: ${impl}"
;;
esac;
if [[ -n ${PYTHON_REQ_USE} ]]; then
PYTHON_PKG_DEP+=[${PYTHON_REQ_USE}];
fi;
export PYTHON_PKG_DEP;
debug-print "${FUNCNAME}: PYTHON_PKG_DEP = ${PYTHON_PKG_DEP}"
;;
PYTHON_SCRIPTDIR)
local dir;
export PYTHON_SCRIPTDIR=${EPREFIX}/usr/lib/python-exec/${impl};
debug-print "${FUNCNAME}: PYTHON_SCRIPTDIR = ${PYTHON_SCRIPTDIR}"
;;
*)
die "python_export: unknown variable ${var}"
;;
esac;
done
}
python_export_best ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ ${#} -gt 0 ]] || set -- EPYTHON PYTHON;
local best MULTIBUILD_VARIANTS;
_python_obtain_impls;
function _python_set_best ()
{
best=${MULTIBUILD_VARIANT}
};
multibuild_for_best_variant _python_set_best;
debug-print "${FUNCNAME}: Best implementation is: ${best}";
python_export "${best}" "${@}";
python_wrapper_setup
}
python_export_utf8_locale ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ $(locale charmap) != UTF-8 ]]; then
if [[ -n ${LC_ALL} ]]; then
ewarn "LC_ALL is set to a locale with a charmap other than UTF-8.";
ewarn "This may trigger build failures in some python packages.";
return 1;
fi;
local lang locales="en_US.UTF-8 $(locale -a)";
for lang in ${locales};
do
if [[ $(LC_CTYPE=${lang} locale charmap 2>/dev/null) == UTF-8 ]]; then
export LC_CTYPE=${lang};
return 0;
fi;
done;
ewarn "Could not find a UTF-8 locale. This may trigger build failures in";
ewarn "some python packages. Please ensure that a UTF-8 locale is listed in";
ewarn "/etc/locale.gen and run locale-gen.";
return 1;
fi;
return 0
}
python_fix_shebang ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die "${FUNCNAME}: EPYTHON unset (pkg_setup not called?)";
local force quiet;
while [[ -n ${@} ]]; do
case "${1}" in
-f | --force)
force=1;
shift
;;
-q | --quiet)
quiet=1;
shift
;;
--)
shift;
break
;;
*)
break
;;
esac;
done;
[[ -n ${1} ]] || die "${FUNCNAME}: no paths given";
local path f;
for path in "$@";
do
local any_correct any_fixed is_recursive;
[[ -d ${path} ]] && is_recursive=1;
while IFS= read -r -d '' f; do
local shebang i;
local error= from=;
IFS= read -r shebang < ${f};
if [[ ${shebang} == '#!'* ]]; then
local split_shebang=();
read -r -a split_shebang <<< ${shebang};
for i in "${split_shebang[@]}";
do
case "${i}" in
*"${EPYTHON}")
debug-print "${FUNCNAME}: in file ${f#${D}}";
debug-print "${FUNCNAME}: shebang matches EPYTHON: ${shebang}";
any_correct=1;
from=${EPYTHON};
break
;;
*python | *python[23])
debug-print "${FUNCNAME}: in file ${f#${D}}";
debug-print "${FUNCNAME}: rewriting shebang: ${shebang}";
if [[ ${i} == *python2 ]]; then
from=python2;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" && error=1;
fi;
else
if [[ ${i} == *python3 ]]; then
from=python3;
if [[ ! -n ${force} ]]; then
python_is_python3 "${EPYTHON}" || error=1;
fi;
else
from=python;
fi;
fi;
break
;;
*python[23].[0123456789] | *pypy | *pypy3 | *jython[23].[0123456789])
if [[ ! -n ${force} ]]; then
error=1;
else
case "${i}" in
*python[23].[0123456789])
from="python[23].[0123456789]"
;;
*pypy)
from="pypy"
;;
*pypy3)
from="pypy3"
;;
*jython[23].[0123456789])
from="jython[23].[0123456789]"
;;
*)
die "${FUNCNAME}: internal error in 2nd pattern match"
;;
esac;
fi;
break
;;
esac;
done;
fi;
if [[ ! -n ${error} && ! -n ${from} ]]; then
[[ -n ${is_recursive} ]] && continue;
error=1;
fi;
if [[ ! -n ${quiet} ]]; then
einfo "Fixing shebang in ${f#${D}}.";
fi;
if [[ ! -n ${error} ]]; then
if [[ ${shebang} == *${from}" "* ]]; then
sed -i -e "1s:${from} :${EPYTHON} :" "${f}" || die;
else
sed -i -e "1s:${from}$:${EPYTHON}:" "${f}" || die;
fi;
any_fixed=1;
else
eerror "The file has incompatible shebang:";
eerror " file: ${f#${D}}";
eerror " current shebang: ${shebang}";
eerror " requested impl: ${EPYTHON}";
die "${FUNCNAME}: conversion of incompatible shebang requested";
fi;
done < <(find "${path}" -type f -print0);
if [[ ! -n ${any_fixed} ]]; then
eqawarn "QA warning: ${FUNCNAME}, ${path#${D}} did not match any fixable files.";
if [[ -n ${any_correct} ]]; then
eqawarn "All files have ${EPYTHON} shebang already.";
else
eqawarn "There are no Python files in specified directory.";
fi;
fi;
done
}
python_foreach_impl ()
{
debug-print-function ${FUNCNAME} "${@}";
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_foreach_variant _python_multibuild_wrapper "${@}"
}
python_gen_cond_dep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl pattern;
local matches=();
local dep=${1};
shift;
for impl in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${impl}" || continue;
for pattern in "$@";
do
if [[ ${impl} == ${pattern} ]]; then
if [[ ${dep} == *'${PYTHON_USEDEP}'* ]]; then
local PYTHON_USEDEP=$(python_gen_usedep "${@}");
dep=${dep//\$\{PYTHON_USEDEP\}/${PYTHON_USEDEP}};
fi;
matches+=("python_targets_${impl}? ( ${dep} )");
break;
fi;
done;
done;
echo "${matches[@]}"
}
python_gen_usedep ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl pattern;
local matches=();
for impl in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${impl}" || continue;
for pattern in "$@";
do
if [[ ${impl} == ${pattern} ]]; then
matches+=("python_targets_${impl}(-)?" "-python_single_target_${impl}(-)");
break;
fi;
done;
done;
[[ -n ${matches[@]} ]] || die "No supported implementations match python_gen_usedep patterns: ${@}";
local out=${matches[@]};
echo "${out// /,}"
}
python_gen_useflags ()
{
debug-print-function ${FUNCNAME} "${@}";
local impl pattern;
local matches=();
for impl in "${PYTHON_COMPAT[@]}";
do
_python_impl_supported "${impl}" || continue;
for pattern in "$@";
do
if [[ ${impl} == ${pattern} ]]; then
matches+=("python_targets_${impl}");
break;
fi;
done;
done;
echo "${matches[@]}"
}
python_get_CFLAGS ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_CFLAGS;
echo "${PYTHON_CFLAGS}"
}
python_get_LIBS ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_LIBS;
echo "${PYTHON_LIBS}"
}
python_get_includedir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_INCLUDEDIR;
echo "${PYTHON_INCLUDEDIR}"
}
python_get_library_path ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_LIBPATH;
echo "${PYTHON_LIBPATH}"
}
python_get_scriptdir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_SCRIPTDIR;
echo "${PYTHON_SCRIPTDIR}"
}
python_get_sitedir ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export "${@}" PYTHON_SITEDIR;
echo "${PYTHON_SITEDIR}"
}
python_install ()
{
docompress -x /usr/share/doc/sage;
insinto /usr/share/doc/sage;
rm doc/common/builder.py;
rm doc/common/custom-sphinx-build.py;
doins -r doc/*
}
python_is_installed ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON";
local -x ROOT=/;
case "${impl}" in
pypy | pypy3)
local append=;
if [[ -n ${PYTHON_REQ_USE} ]]; then
append=[${PYTHON_REQ_USE}];
fi;
has_version "dev-python/${impl}${append}" || has_version "dev-python/${impl}-bin${append}"
;;
*)
local PYTHON_PKG_DEP;
python_export "${impl}" PYTHON_PKG_DEP;
has_version "${PYTHON_PKG_DEP}"
;;
esac
}
python_is_python3 ()
{
local impl=${1:-${EPYTHON}};
[[ -n ${impl} ]] || die "python_is_python3: no impl nor EPYTHON";
[[ ${impl} == python3* || ${impl} == pypy3 ]]
}
python_moduleinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_moduleroot=${1}
}
python_newexe ()
{
debug-print-function ${FUNCNAME} "${@}";
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
[[ ${#} -eq 2 ]] || die "Usage: ${FUNCNAME} <path> <new-name>";
local d=${python_scriptroot:-${DESTTREE}/bin};
local wrapd=${d};
local f=${1};
local barefn=${2};
local newfn;
if _python_want_python_exec2; then
local PYTHON_SCRIPTDIR;
python_export PYTHON_SCRIPTDIR;
d=${PYTHON_SCRIPTDIR#${EPREFIX}};
newfn=${barefn};
else
newfn=${barefn}-${EPYTHON};
fi;
( dodir "${wrapd}";
exeinto "${d}";
newexe "${f}" "${newfn}" || die );
_python_ln_rel "${ED%/}"$(_python_get_wrapper_path) "${ED%/}/${wrapd}/${barefn}" || die;
if [[ -n ${_PYTHON_REWRITE_SHEBANG} ]]; then
python_fix_shebang -q "${ED%/}/${d}/${newfn}";
fi
}
python_newscript ()
{
debug-print-function ${FUNCNAME} "${@}";
local _PYTHON_REWRITE_SHEBANG=1;
python_newexe "${@}"
}
python_optimize ()
{
debug-print-function ${FUNCNAME} "${@}";
if [[ ${EBUILD_PHASE} == pre* || ${EBUILD_PHASE} == post* ]]; then
eerror "The new Python eclasses expect the compiled Python files to";
eerror "be controlled by the Package Manager. For this reason,";
eerror "the python_optimize function can be used only during src_* phases";
eerror "(src_install most commonly) and not during pkg_* phases.";
echo;
die "python_optimize is not to be used in pre/post* phases";
fi;
[[ -n ${EPYTHON} ]] || die 'No Python implementation set (EPYTHON is null).';
local PYTHON=${PYTHON};
[[ -n ${PYTHON} ]] || python_export PYTHON;
if [[ ${#} -eq 0 ]]; then
local f;
while IFS= read -r -d '' f; do
if [[ ${f} == /* && -d ${D}${f} ]]; then
set -- "${D}${f}" "${@}";
fi;
done < <("${PYTHON}" -c 'import sys; print("\0".join(sys.path))');
debug-print "${FUNCNAME}: using sys.path: ${*/%/;}";
fi;
local d;
for d in "$@";
do
local instpath=${d#${D}};
instpath=/${instpath##/};
case "${EPYTHON}" in
python*)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}";
"${PYTHON}" -OO -m compileall -q -f -d "${instpath}" "${d}"
;;
*)
"${PYTHON}" -m compileall -q -f -d "${instpath}" "${d}"
;;
esac;
done
}
python_parallel_foreach_impl ()
{
debug-print-function ${FUNCNAME} "${@}";
local MULTIBUILD_JOBS=${MULTIBUILD_JOBS:-${DISTUTILS_JOBS}};
local MULTIBUILD_VARIANTS;
_python_obtain_impls;
multibuild_parallel_foreach_variant _python_multibuild_wrapper "${@}"
}
python_prepare_all ()
{
distutils-r1_python_prepare_all;
cd doc;
rm -rf en/reference/dev;
cp "${WORKDIR}"/Singular/3-1-6/info/singular.hlp ./;
touch en/__init__.py;
mkdir -p output/doctrees/en/tutorial;
mkdir -p en/tutorial/templates;
mkdir -p en/tutorial/static;
mkdir -p en/reference/templates;
mkdir -p en/reference/static
}
python_replicate_script ()
{
debug-print-function ${FUNCNAME} "${@}";
function _python_replicate_script ()
{
local _PYTHON_FIX_SHEBANG_QUIET=1;
if _python_want_python_exec2; then
local PYTHON_SCRIPTDIR;
python_export PYTHON_SCRIPTDIR;
( exeinto "${PYTHON_SCRIPTDIR#${EPREFIX}}";
doexe "${files[@]}" );
python_fix_shebang -q "${files[@]/*\//${D%/}/${PYTHON_SCRIPTDIR}/}";
else
local f;
for f in "${files[@]}";
do
cp -p "${f}" "${f}-${EPYTHON}" || die;
done;
python_fix_shebang -q "${files[@]/%/-${EPYTHON}}";
fi
};
local files=("${@}");
python_foreach_impl _python_replicate_script;
local f;
for f in "$@";
do
_python_ln_rel "${ED%/}$(_python_get_wrapper_path)" "${f}" || die;
done
}
python_scriptinto ()
{
debug-print-function ${FUNCNAME} "${@}";
python_scriptroot=${1}
}
python_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
python_export_best;
python_wrapper_setup
}
python_wrapper_setup ()
{
debug-print-function ${FUNCNAME} "${@}";
local workdir=${1:-${T}/${EPYTHON}};
local impl=${2:-${EPYTHON}};
[[ -n ${workdir} ]] || die "${FUNCNAME}: no workdir specified.";
[[ -n ${impl} ]] || die "${FUNCNAME}: no impl nor EPYTHON specified.";
if [[ ! -x ${workdir}/bin/python ]]; then
mkdir -p "${workdir}"/{bin,pkgconfig} || die;
rm -f "${workdir}"/bin/python{,2,3,-config};
rm -f "${workdir}"/bin/2to3;
rm -f "${workdir}"/pkgconfig/python{,2,3}.pc;
local EPYTHON PYTHON;
python_export "${impl}" EPYTHON PYTHON;
local pyver;
if python_is_python3; then
pyver=3;
else
pyver=2;
fi;
ln -s "${PYTHON}" "${workdir}"/bin/python || die;
ln -s python "${workdir}"/bin/python${pyver} || die;
local nonsupp=();
if [[ ${EPYTHON} == python* ]]; then
ln -s "${PYTHON}-config" "${workdir}"/bin/python-config || die;
ln -s "${PYTHON/python/2to3-}" "${workdir}"/bin/2to3 || die;
ln -s "${EPREFIX}"/usr/$(get_libdir)/pkgconfig/${EPYTHON/n/n-}.pc "${workdir}"/pkgconfig/python.pc || die;
ln -s python.pc "${workdir}"/pkgconfig/python${pyver}.pc || die;
else
nonsupp+=(2to3 python-config);
fi;
local x;
for x in "${nonsupp[@]}";
do
cat > "${workdir}"/bin/${x} <<__EOF__
#!/bin/sh
echo "${x} is not supported by ${EPYTHON}" >&2
exit 1
__EOF__
chmod +x "${workdir}"/bin/${x} || die;
done
if [[ ${PATH##:*} != ${workdir}/bin ]]; then
PATH=${workdir}/bin${PATH:+:${PATH}};
fi;
if [[ ${PKG_CONFIG_PATH##:*} != ${workdir}/pkgconfig ]]; then
PKG_CONFIG_PATH=${workdir}/pkgconfig${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}};
fi;
export PATH PKG_CONFIG_PATH;
fi
}
redirect_alloc_fd ()
{
local var=$1 file=$2 redir=${3:-"<>"};
if [[ ! -L /dev/fd && ${CBUILD} == *linux* ]]; then
eerror "You're missing a /dev/fd symlink to /proc/self/fd.";
eerror "Please fix the symlink and check your boot scripts (udev/etc...).";
die "/dev/fd is broken";
fi;
if [[ $(( (BASH_VERSINFO[0] << 8) + BASH_VERSINFO[1] )) -ge $(( (4 << 8) + 1 )) ]]; then
eval "exec {${var}}${redir}'${file}'";
else
local fd=10;
while :; do
if [[ ! -e /dev/fd/${fd} ]] && [[ ! -L /dev/fd/${fd} ]]; then
eval "exec ${fd}${redir}'${file}'" && break;
fi;
[[ ${fd} -gt 1024 ]] && die 'could not locate a free temp fd !?';
: $(( ++fd ));
done;
: $(( ${var} = fd ));
fi
}
replace_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
}
run_in_build_dir ()
{
debug-print-function ${FUNCNAME} "${@}";
local ret;
[[ ${#} -ne 0 ]] || die "${FUNCNAME}: no command specified.";
[[ -n ${BUILD_DIR} ]] || die "${FUNCNAME}: BUILD_DIR not set.";
mkdir -p "${BUILD_DIR}" || die;
pushd "${BUILD_DIR}" > /dev/null || die;
"${@}";
ret=${?};
popd > /dev/null || die;
return ${ret}
}
src_compile ()
{
distutils-r1_src_compile "$@"
}
src_configure ()
{
distutils-r1_src_configure "$@"
}
src_install ()
{
distutils-r1_src_install "$@"
}
src_prepare ()
{
distutils-r1_src_prepare "$@"
}
src_test ()
{
distutils-r1_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
aarch64*be)
echo big
;;
aarch64)
echo little
;;
alpha*)
echo big
;;
arm*b*)
echo big
;;
arm*)
echo little
;;
cris*)
echo little
;;
hppa*)
echo big
;;
i?86*)
echo little
;;
ia64*)
echo little
;;
m68*)
echo big
;;
mips*l*)
echo little
;;
mips*)
echo big
;;
powerpc*le)
echo little
;;
powerpc*)
echo big
;;
s390*)
echo big
;;
sh*b*)
echo big
;;
sh*)
echo little
;;
sparc*)
echo big
;;
x86_64*)
echo little
;;
*)
echo wtf
;;
esac
}
tc-env_build ()
{
tc-export_build_env;
CFLAGS=${BUILD_CFLAGS} CXXFLAGS=${BUILD_CXXFLAGS} CPPFLAGS=${BUILD_CPPFLAGS} LDFLAGS=${BUILD_LDFLAGS} AR=$(tc-getBUILD_AR) AS=$(tc-getBUILD_AS) CC=$(tc-getBUILD_CC) CPP=$(tc-getBUILD_CPP) CXX=$(tc-getBUILD_CXX) LD=$(tc-getBUILD_LD) NM=$(tc-getBUILD_NM) PKG_CONFIG=$(tc-getBUILD_PKG_CONFIG) RANLIB=$(tc-getBUILD_RANLIB) "$@"
}
tc-export ()
{
local var;
for var in "$@";
do
[[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
eval tc-get${var} > /dev/null;
done
}
tc-export_build_env ()
{
tc-export "$@";
: ${BUILD_CFLAGS:=-O1 -pipe};
: ${BUILD_CXXFLAGS:=-O1 -pipe};
: ${BUILD_CPPFLAGS:=};
: ${BUILD_LDFLAGS:=};
export BUILD_{C,CXX,CPP,LD}FLAGS;
local v;
for v in BUILD_{C,CXX,CPP,LD}FLAGS;
do
export ${v#BUILD_}_FOR_BUILD="${!v}";
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 ()
{
[[ ${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}};
[[ ${host} == *-mint* ]]
}
tc-ninja_magic_to_arch ()
{
function ninj ()
{
[[ ${type} == "kern" ]] && echo $1 || echo $2
};
local type=$1;
local host=$2;
[[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
local KV=${KV:-${KV_FULL}};
[[ ${type} == "kern" ]] && [[ -z ${KV} ]] && ewarn "QA: Kernel version could not be determined, please inherit kernel-2 or linux-info";
case ${host} in
aarch64*)
echo arm64
;;
alpha*)
echo alpha
;;
arm*)
echo arm
;;
avr*)
ninj avr32 avr
;;
bfin*)
ninj blackfin bfin
;;
c6x)
echo c6x
;;
cris*)
echo cris
;;
frv)
echo frv
;;
hexagon)
echo hexagon
;;
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
;;
metag)
echo metag
;;
mips*)
echo mips
;;
nios2*)
echo nios2
;;
nios*)
echo nios
;;
or32)
echo openrisc
;;
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
;;
riscv*)
echo riscv
;;
s390*)
echo s390
;;
score)
echo score
;;
sh64*)
ninj sh64 sh
;;
sh*)
echo sh
;;
sparc64*)
ninj sparc64 sparc
;;
sparc*)
[[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
;;
tile*)
echo tile
;;
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
;;
xtensa*)
echo xtensa
;;
*)
echo unknown
;;
esac
}
use_if_iuse ()
{
in_iuse $1 || return 1;
use $1
}
validate_desktop_entries ()
{
_eutils_eprefix_init;
if [[ -x "${EPREFIX}"/usr/bin/desktop-file-validate ]]; then
einfo "Checking desktop entry validity";
local directories="";
for d in /usr/share/applications $@;
do
[[ -d ${ED}${d} ]] && directories="${directories} ${ED}${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/${ED}/}:};
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
}
[-- Attachment #5: pqv.txt --]
[-- Type: text/plain, Size: 655 bytes --]
[ebuild N ] sci-mathematics/singular-3.1.6 USE="boost emacs flint python readline -doc -examples {-test}" PYTHON_TARGETS="python2_7"
* IMPORTANT: 1 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.
[ebuild N ] x11-drivers/ati-drivers-14.4_p1 USE="modules multilib pax_kernel -debug -qt4 -static-libs"
* IMPORTANT: 1 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.
[ebuild R ] sci-mathematics/sage-doc-6.3 USE="html*" PYTHON_TARGETS="python2_7"
* IMPORTANT: 1 news items need reading for repository 'gentoo'.
* Use eselect news to read news items.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-21 18:09 [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite Jeramia Poland
@ 2014-11-22 2:33 ` François Bissey
2014-11-22 19:50 ` François Bissey
0 siblings, 1 reply; 12+ messages in thread
From: François Bissey @ 2014-11-22 2:33 UTC (permalink / raw
To: gentoo-science
Hum… funky things are happening to you. First thing first. I assume penal is installed otherwise
you wouldn’t have gone that far.
What does
ldd -r /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so
return?
And
ldd -r /usr/lib64/libpynac.so
?
François
> On 22/11/2014, at 07:09, Jeramia Poland <jeramia.poland@gmail.com> wrote:
>
> I've emerge sage-6.3 but the last package sage-doc is failing. I though sage might work without it but it crashes when I attempt to run it saying that pynac.so is an undefined symbol.
>
> It seems like sage-doc is complaining of a symbol issue which I assume is related to my "bizarre" gcc flag configuration. I've attempted to emerge with no graphite and no lto flags but it still is not working. I attempted changing to the 'vanilla' profile through gcc-config but that did not work either.
>
> What should I try next?
>
> Attached are:
>
> info output
> build log
> whatever -pqv outputs
> environment
>
> Thanks,
> Jeramia
> <info.txt><build.log><environment><pqv.txt>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-22 2:33 ` François Bissey
@ 2014-11-22 19:50 ` François Bissey
2014-11-24 4:12 ` Jeramia Poland
0 siblings, 1 reply; 12+ messages in thread
From: François Bissey @ 2014-11-22 19:50 UTC (permalink / raw
To: gentoo-science
I hate automated spellchecking, I meant pynac not “penal” I remember
turning it off on an iPad after a ludicrous suggestion for lapack.
François
> On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com> wrote:
>
> I assume penal is installed otherwise
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-22 19:50 ` François Bissey
@ 2014-11-24 4:12 ` Jeramia Poland
2014-11-24 6:05 ` François Bissey
0 siblings, 1 reply; 12+ messages in thread
From: Jeramia Poland @ 2014-11-24 4:12 UTC (permalink / raw
To: gentoo-science
[-- Attachment #1.1: Type: text/plain, Size: 509 bytes --]
Sorry for the delayed reply, I had a bunch of papers to grade. Yes, it is
installed. Attached are the lld results.
Jeramia
On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <frp.bissey@gmail.com>
wrote:
> I hate automated spellchecking, I meant pynac not “penal” I remember
> turning it off on an iPad after a ludicrous suggestion for lapack.
>
> François
> > On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com> wrote:
> >
> > I assume penal is installed otherwise
>
>
>
[-- Attachment #1.2: Type: text/html, Size: 988 bytes --]
[-- Attachment #2: lib_link_1.txt --]
[-- Type: text/plain, Size: 2452 bytes --]
linux-vdso.so.1 (0x00007fff28600000)
libgsl.so.0 => /usr/lib64/libgsl.so.0 (0x00007f1780680000)
libpynac.so.1 => /usr/lib64/libpynac.so.1 (0x00007f1780490000)
libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007f1780210000)
libcsage.so => /usr/lib64/libcsage.so (0x00007f17801f8000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007f177fe10000)
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/libstdc++.so.6 (0x00007f177fcd8000)
libm.so.6 => /lib64/libm.so.6 (0x00007f177f9e0000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f177f9c8000)
libc.so.6 => /lib64/libc.so.6 (0x00007f177f610000)
libgslcblas.so.0 => /usr/lib64/libgslcblas.so.0 (0x00007f177f3d8000)
libntl-6.1.0.so => /usr/lib64/libntl-6.1.0.so (0x00007f177f1e8000)
libpari-gmp.so.3 => /usr/lib64/libpari-gmp.so.3 (0x00007f177ed20000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f177eb00000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f177e8f8000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f177e6f0000)
/lib64/ld-linux-x86-64.so.2 (0x0000003547800000)
libgf2x.so.1 => /usr/lib64/libgf2x.so.1 (0x00007f177e6d0000)
undefined symbol: _ZTVN5GiNaC9containerISt6vectorEE (/usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so)
linux-vdso.so.1 (0x00007fff827a0000)
libgsl.so.0 => /usr/lib64/libgsl.so.0 (0x00007f380ad60000)
libpynac.so.1 => /usr/lib64/libpynac.so.1 (0x00007f380ab70000)
libgmp.so.10 => /usr/lib64/libgmp.so.10 (0x00007f380aaf0000)
libcsage.so => /usr/lib64/libcsage.so (0x00007f380a8d8000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007f380a6e8000)
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/libstdc++.so.6 (0x00007f380a5d0000)
libm.so.6 => /lib64/libm.so.6 (0x00007f380a2d8000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f380a2c0000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3809f20000)
libgslcblas.so.0 => /usr/lib64/libgslcblas.so.0 (0x00007f3809ce0000)
libntl-6.1.0.so => /usr/lib64/libntl-6.1.0.so (0x00007f3809910000)
libpari-gmp.so.3 => /usr/lib64/libpari-gmp.so.3 (0x00007f3809370000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3809150000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3808f48000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f3808d40000)
/lib64/ld-linux-x86-64.so.2 (0x000000305ba00000)
libgf2x.so.1 => /usr/lib64/libgf2x.so.1 (0x00007f3808d20000)
undefined symbol: _ZTVN5GiNaC9containerISt6vectorEE (/usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so)
[-- Attachment #3: lib_link_2.txt --]
[-- Type: text/plain, Size: 1196 bytes --]
linux-vdso.so.1 (0x00007fffa6d60000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007f4a57800000)
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/libstdc++.so.6 (0x00007f4a576c8000)
libm.so.6 => /lib64/libm.so.6 (0x00007f4a573d0000)
libc.so.6 => /lib64/libc.so.6 (0x00007f4a57018000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f4a57000000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4a56de0000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f4a56bd8000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f4a569d0000)
/lib64/ld-linux-x86-64.so.2 (0x0000003547800000)
linux-vdso.so.1 (0x00007fff0dfb8000)
libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007f2b1ff90000)
libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.3/libstdc++.so.6 (0x00007f2b1fe78000)
libm.so.6 => /lib64/libm.so.6 (0x00007f2b1fb80000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2b1f7e0000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2b1f7c8000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2b1f5a8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2b1f3a0000)
libutil.so.1 => /lib64/libutil.so.1 (0x00007f2b1f198000)
/lib64/ld-linux-x86-64.so.2 (0x000000305ba00000)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-24 4:12 ` Jeramia Poland
@ 2014-11-24 6:05 ` François Bissey
2014-11-25 21:13 ` François Bissey
0 siblings, 1 reply; 12+ messages in thread
From: François Bissey @ 2014-11-24 6:05 UTC (permalink / raw
To: gentoo-science
Hum I am starting to wonder if there are things going on between lot and C++
templates. More professional code may do ok but a lot of the stuff we have in sage may be a bit dubious.
Can you send me the penal build log please and for good measure the one for sage.
You can do it privately if you don’t want to post big file on the list.
I have been free of grading for almost 4 years. My wife is very happy about that.
François
> On 24/11/2014, at 17:12, Jeramia Poland <jeramia.poland@gmail.com> wrote:
>
> Sorry for the delayed reply, I had a bunch of papers to grade. Yes, it is installed. Attached are the lld results.
> Jeramia
>
> On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <frp.bissey@gmail.com> wrote:
> I hate automated spellchecking, I meant pynac not “penal” I remember
> turning it off on an iPad after a ludicrous suggestion for lapack.
>
> François
> > On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com> wrote:
> >
> > I assume penal is installed otherwise
>
>
>
> <lib_link_1.txt><lib_link_2.txt>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-24 6:05 ` François Bissey
@ 2014-11-25 21:13 ` François Bissey
2014-11-26 5:57 ` Jeramia Poland
0 siblings, 1 reply; 12+ messages in thread
From: François Bissey @ 2014-11-25 21:13 UTC (permalink / raw
To: gentoo-science
I think I have all the logs I can use at the moment. I want the output of the
following two commands:
nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
ZTVN5GiNaC9containerISt6vectorEE
nm -D /usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE
Actually make that 3 commands with the output of
readelf -d /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so
Also to cross check that I am not missing anything fro your info output,
I cannot see "-ffat-lto-objects" anywhere in your compilation flags.
Is this correct?
Francois
On Mon, 24 Nov 2014 19:05:42 François Bissey wrote:
> Hum I am starting to wonder if there are things going on between lot and C++
> templates. More professional code may do ok but a lot of the stuff we have
> in sage may be a bit dubious. Can you send me the penal build log please
> and for good measure the one for sage. You can do it privately if you don’t
> want to post big file on the list.
>
> I have been free of grading for almost 4 years. My wife is very happy about
> that.
>
> François
>
> > On 24/11/2014, at 17:12, Jeramia Poland <jeramia.poland@gmail.com> wrote:
> >
> > Sorry for the delayed reply, I had a bunch of papers to grade. Yes, it is
> > installed. Attached are the lld results. Jeramia
> >
> > On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <frp.bissey@gmail.com>
> > wrote: I hate automated spellchecking, I meant pynac not “penal” I
> > remember turning it off on an iPad after a ludicrous suggestion for
> > lapack.
> >
> > François
> >
> > > On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com> wrote:
> > > I assume penal is installed otherwise
> >
> > <lib_link_1.txt><lib_link_2.txt>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-25 21:13 ` François Bissey
@ 2014-11-26 5:57 ` Jeramia Poland
2014-11-26 6:28 ` François Bissey
0 siblings, 1 reply; 12+ messages in thread
From: Jeramia Poland @ 2014-11-26 5:57 UTC (permalink / raw
To: gentoo-science
[-- Attachment #1.1: Type: text/plain, Size: 2846 bytes --]
The output of
nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
ZTVN5GiNaC9containerISt6vectorEE
is:
U _ZTVN5GiNaC9containerISt6vectorEE (with the ZTVN part showing up in red)
The output of
nm -D /usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE
is:
(nothing it appears to be missing)
Output of the third command is attached. The -ffat-lto-objects flag should
be in there. I added after the first couple of packages (like pciutils,
elfutils, openssh, etc.) wouldn't build to see if it would help so I didn't
have to use the "no-lto" environment setting from that graphite and lto
instruction page I referenced earlier. It didn't see to work as I now have
a package.env file full of no-lto entries. Neither sage nor pynac are
no-lto entries right now as it appeared to me that they merged.
Jeramia
On Wed, Nov 26, 2014 at 2:43 AM, François Bissey <frp.bissey@gmail.com>
wrote:
> I think I have all the logs I can use at the moment. I want the output of
> the
> following two commands:
> nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
> ZTVN5GiNaC9containerISt6vectorEE
>
> nm -D /usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE
>
> Actually make that 3 commands with the output of
> readelf -d /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so
>
> Also to cross check that I am not missing anything fro your info output,
> I cannot see "-ffat-lto-objects" anywhere in your compilation flags.
> Is this correct?
>
> Francois
>
> On Mon, 24 Nov 2014 19:05:42 François Bissey wrote:
> > Hum I am starting to wonder if there are things going on between lot and
> C++
> > templates. More professional code may do ok but a lot of the stuff we
> have
> > in sage may be a bit dubious. Can you send me the penal build log please
> > and for good measure the one for sage. You can do it privately if you
> don’t
> > want to post big file on the list.
> >
> > I have been free of grading for almost 4 years. My wife is very happy
> about
> > that.
> >
> > François
> >
> > > On 24/11/2014, at 17:12, Jeramia Poland <jeramia.poland@gmail.com>
> wrote:
> > >
> > > Sorry for the delayed reply, I had a bunch of papers to grade. Yes, it
> is
> > > installed. Attached are the lld results. Jeramia
> > >
> > > On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <frp.bissey@gmail.com
> >
> > > wrote: I hate automated spellchecking, I meant pynac not “penal” I
> > > remember turning it off on an iPad after a ludicrous suggestion for
> > > lapack.
> > >
> > > François
> > >
> > > > On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com>
> wrote:
> > > > I assume penal is installed otherwise
> > >
> > > <lib_link_1.txt><lib_link_2.txt>
>
>
>
[-- Attachment #1.2: Type: text/html, Size: 5481 bytes --]
[-- Attachment #2: readelf.txt --]
[-- Type: text/plain, Size: 1891 bytes --]
Dynamic section at offset 0x47958 contains 32 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libgsl.so.0]
0x0000000000000001 (NEEDED) Shared library: [libpynac.so.1]
0x0000000000000001 (NEEDED) Shared library: [libgmp.so.10]
0x0000000000000001 (NEEDED) Shared library: [libcsage.so]
0x0000000000000001 (NEEDED) Shared library: [libpython2.7.so.1.0]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0xc348
0x000000000000000d (FINI) 0x40614
0x0000000000000019 (INIT_ARRAY) 0x247440
0x000000000000001b (INIT_ARRAYSZ) 16 (bytes)
0x000000000000001a (FINI_ARRAY) 0x247450
0x000000000000001c (FINI_ARRAYSZ) 8 (bytes)
0x000000006ffffef5 (GNU_HASH) 0x1c8
0x0000000000000005 (STRTAB) 0x3460
0x0000000000000006 (SYMTAB) 0x988
0x000000000000000a (STRSZ) 10190 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000003 (PLTGOT) 0x248000
0x0000000000000002 (PLTRELSZ) 4608 (bytes)
0x0000000000000014 (PLTREL) RELA
0x0000000000000017 (JMPREL) 0xb148
0x0000000000000007 (RELA) 0x6060
0x0000000000000008 (RELASZ) 20712 (bytes)
0x0000000000000009 (RELAENT) 24 (bytes)
0x000000006ffffffe (VERNEED) 0x5fc0
0x000000006fffffff (VERNEEDNUM) 4
0x000000006ffffff0 (VERSYM) 0x5c2e
0x000000006ffffff9 (RELACOUNT) 585
0x0000000000000000 (NULL) 0x0
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-26 5:57 ` Jeramia Poland
@ 2014-11-26 6:28 ` François Bissey
2014-11-26 6:44 ` Jeramia Poland
2014-11-26 7:32 ` François Bissey
0 siblings, 2 replies; 12+ messages in thread
From: François Bissey @ 2014-11-26 6:28 UTC (permalink / raw
To: gentoo-science
I think I will ping pynac upstream to see if they have any idea but I think
it may be a recurring gcc or a subtle abuse of C++. It would be interesting to see
if putting -fno-fat-lto-objects would with getting the symbol in pynac. There are
other things ‘i can think off that may work but need to consult upstream and
people who know more c++.
François
> On 26/11/2014, at 18:57, Jeramia Poland <jeramia.poland@gmail.com> wrote:
>
> The output of
>
> nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
> ZTVN5GiNaC9containerISt6vectorEE
>
> is:
>
> U _ZTVN5GiNaC9containerISt6vectorEE (with the ZTVN part showing up in red)
>
> The output of
>
> nm -D /usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE
>
> is:
>
> (nothing it appears to be missing)
>
> Output of the third command is attached. The -ffat-lto-objects flag should be in there. I added after the first couple of packages (like pciutils, elfutils, openssh, etc.) wouldn't build to see if it would help so I didn't have to use the "no-lto" environment setting from that graphite and lto instruction page I referenced earlier. It didn't see to work as I now have a package.env file full of no-lto entries. Neither sage nor pynac are no-lto entries right now as it appeared to me that they merged.
>
> Jeramia
>
>
>
> On Wed, Nov 26, 2014 at 2:43 AM, François Bissey <frp.bissey@gmail.com> wrote:
> I think I have all the logs I can use at the moment. I want the output of the
> following two commands:
> nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
> ZTVN5GiNaC9containerISt6vectorEE
>
> nm -D /usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE
>
> Actually make that 3 commands with the output of
> readelf -d /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so
>
> Also to cross check that I am not missing anything fro your info output,
> I cannot see "-ffat-lto-objects" anywhere in your compilation flags.
> Is this correct?
>
> Francois
>
> On Mon, 24 Nov 2014 19:05:42 François Bissey wrote:
> > Hum I am starting to wonder if there are things going on between lot and C++
> > templates. More professional code may do ok but a lot of the stuff we have
> > in sage may be a bit dubious. Can you send me the penal build log please
> > and for good measure the one for sage. You can do it privately if you don’t
> > want to post big file on the list.
> >
> > I have been free of grading for almost 4 years. My wife is very happy about
> > that.
> >
> > François
> >
> > > On 24/11/2014, at 17:12, Jeramia Poland <jeramia.poland@gmail.com> wrote:
> > >
> > > Sorry for the delayed reply, I had a bunch of papers to grade. Yes, it is
> > > installed. Attached are the lld results. Jeramia
> > >
> > > On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <frp.bissey@gmail.com>
> > > wrote: I hate automated spellchecking, I meant pynac not “penal” I
> > > remember turning it off on an iPad after a ludicrous suggestion for
> > > lapack.
> > >
> > > François
> > >
> > > > On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com> wrote:
> > > > I assume penal is installed otherwise
> > >
> > > <lib_link_1.txt><lib_link_2.txt>
>
>
>
> <readelf.txt>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-26 6:28 ` François Bissey
@ 2014-11-26 6:44 ` Jeramia Poland
2014-11-26 7:32 ` François Bissey
1 sibling, 0 replies; 12+ messages in thread
From: Jeramia Poland @ 2014-11-26 6:44 UTC (permalink / raw
To: gentoo-science
[-- Attachment #1: Type: text/plain, Size: 3688 bytes --]
Okay, let me know if you want to try something.
On Wed, Nov 26, 2014 at 11:58 AM, François Bissey <frp.bissey@gmail.com>
wrote:
> I think I will ping pynac upstream to see if they have any idea but I think
> it may be a recurring gcc or a subtle abuse of C++. It would be
> interesting to see
> if putting -fno-fat-lto-objects would with getting the symbol in pynac.
> There are
> other things ‘i can think off that may work but need to consult upstream
> and
> people who know more c++.
>
> François
>
> > On 26/11/2014, at 18:57, Jeramia Poland <jeramia.poland@gmail.com>
> wrote:
> >
> > The output of
> >
> > nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
> > ZTVN5GiNaC9containerISt6vectorEE
> >
> > is:
> >
> > U _ZTVN5GiNaC9containerISt6vectorEE (with the ZTVN part showing up in
> red)
> >
> > The output of
> >
> > nm -D /usr/lib64/libpynac.so.1.1.0 | grep
> ZTVN5GiNaC9containerISt6vectorEE
> >
> > is:
> >
> > (nothing it appears to be missing)
> >
> > Output of the third command is attached. The -ffat-lto-objects flag
> should be in there. I added after the first couple of packages (like
> pciutils, elfutils, openssh, etc.) wouldn't build to see if it would help
> so I didn't have to use the "no-lto" environment setting from that graphite
> and lto instruction page I referenced earlier. It didn't see to work as I
> now have a package.env file full of no-lto entries. Neither sage nor pynac
> are no-lto entries right now as it appeared to me that they merged.
> >
> > Jeramia
> >
> >
> >
> > On Wed, Nov 26, 2014 at 2:43 AM, François Bissey <frp.bissey@gmail.com>
> wrote:
> > I think I have all the logs I can use at the moment. I want the output
> of the
> > following two commands:
> > nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
> > ZTVN5GiNaC9containerISt6vectorEE
> >
> > nm -D /usr/lib64/libpynac.so.1.1.0 | grep
> ZTVN5GiNaC9containerISt6vectorEE
> >
> > Actually make that 3 commands with the output of
> > readelf -d /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so
> >
> > Also to cross check that I am not missing anything fro your info output,
> > I cannot see "-ffat-lto-objects" anywhere in your compilation flags.
> > Is this correct?
> >
> > Francois
> >
> > On Mon, 24 Nov 2014 19:05:42 François Bissey wrote:
> > > Hum I am starting to wonder if there are things going on between lot
> and C++
> > > templates. More professional code may do ok but a lot of the stuff we
> have
> > > in sage may be a bit dubious. Can you send me the penal build log
> please
> > > and for good measure the one for sage. You can do it privately if you
> don’t
> > > want to post big file on the list.
> > >
> > > I have been free of grading for almost 4 years. My wife is very happy
> about
> > > that.
> > >
> > > François
> > >
> > > > On 24/11/2014, at 17:12, Jeramia Poland <jeramia.poland@gmail.com>
> wrote:
> > > >
> > > > Sorry for the delayed reply, I had a bunch of papers to grade. Yes,
> it is
> > > > installed. Attached are the lld results. Jeramia
> > > >
> > > > On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <
> frp.bissey@gmail.com>
> > > > wrote: I hate automated spellchecking, I meant pynac not “penal” I
> > > > remember turning it off on an iPad after a ludicrous suggestion for
> > > > lapack.
> > > >
> > > > François
> > > >
> > > > > On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com>
> wrote:
> > > > > I assume penal is installed otherwise
> > > >
> > > > <lib_link_1.txt><lib_link_2.txt>
> >
> >
> >
> > <readelf.txt>
>
>
>
[-- Attachment #2: Type: text/html, Size: 4767 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-26 6:28 ` François Bissey
2014-11-26 6:44 ` Jeramia Poland
@ 2014-11-26 7:32 ` François Bissey
2014-11-26 7:39 ` Jeramia Poland
1 sibling, 1 reply; 12+ messages in thread
From: François Bissey @ 2014-11-26 7:32 UTC (permalink / raw
To: gentoo-science
Well first emerge penal with “-fno-fat-lto-objects” and inspect libpynac.so
for the symbol.
François
> On 26/11/2014, at 19:28, François Bissey <frp.bissey@gmail.com> wrote:
>
> I think I will ping pynac upstream to see if they have any idea but I think
> it may be a recurring gcc or a subtle abuse of C++. It would be interesting to see
> if putting -fno-fat-lto-objects would with getting the symbol in pynac. There are
> other things ‘i can think off that may work but need to consult upstream and
> people who know more c++.
>
> François
>
>> On 26/11/2014, at 18:57, Jeramia Poland <jeramia.poland@gmail.com> wrote:
>>
>> The output of
>>
>> nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
>> ZTVN5GiNaC9containerISt6vectorEE
>>
>> is:
>>
>> U _ZTVN5GiNaC9containerISt6vectorEE (with the ZTVN part showing up in red)
>>
>> The output of
>>
>> nm -D /usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE
>>
>> is:
>>
>> (nothing it appears to be missing)
>>
>> Output of the third command is attached. The -ffat-lto-objects flag should be in there. I added after the first couple of packages (like pciutils, elfutils, openssh, etc.) wouldn't build to see if it would help so I didn't have to use the "no-lto" environment setting from that graphite and lto instruction page I referenced earlier. It didn't see to work as I now have a package.env file full of no-lto entries. Neither sage nor pynac are no-lto entries right now as it appeared to me that they merged.
>>
>> Jeramia
>>
>>
>>
>> On Wed, Nov 26, 2014 at 2:43 AM, François Bissey <frp.bissey@gmail.com> wrote:
>> I think I have all the logs I can use at the moment. I want the output of the
>> following two commands:
>> nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
>> ZTVN5GiNaC9containerISt6vectorEE
>>
>> nm -D /usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE
>>
>> Actually make that 3 commands with the output of
>> readelf -d /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so
>>
>> Also to cross check that I am not missing anything fro your info output,
>> I cannot see "-ffat-lto-objects" anywhere in your compilation flags.
>> Is this correct?
>>
>> Francois
>>
>> On Mon, 24 Nov 2014 19:05:42 François Bissey wrote:
>>> Hum I am starting to wonder if there are things going on between lot and C++
>>> templates. More professional code may do ok but a lot of the stuff we have
>>> in sage may be a bit dubious. Can you send me the penal build log please
>>> and for good measure the one for sage. You can do it privately if you don’t
>>> want to post big file on the list.
>>>
>>> I have been free of grading for almost 4 years. My wife is very happy about
>>> that.
>>>
>>> François
>>>
>>>> On 24/11/2014, at 17:12, Jeramia Poland <jeramia.poland@gmail.com> wrote:
>>>>
>>>> Sorry for the delayed reply, I had a bunch of papers to grade. Yes, it is
>>>> installed. Attached are the lld results. Jeramia
>>>>
>>>> On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <frp.bissey@gmail.com>
>>>> wrote: I hate automated spellchecking, I meant pynac not “penal” I
>>>> remember turning it off on an iPad after a ludicrous suggestion for
>>>> lapack.
>>>>
>>>> François
>>>>
>>>>> On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com> wrote:
>>>>> I assume penal is installed otherwise
>>>>
>>>> <lib_link_1.txt><lib_link_2.txt>
>>
>>
>>
>> <readelf.txt>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-26 7:32 ` François Bissey
@ 2014-11-26 7:39 ` Jeramia Poland
2014-12-01 22:43 ` François Bissey
0 siblings, 1 reply; 12+ messages in thread
From: Jeramia Poland @ 2014-11-26 7:39 UTC (permalink / raw
To: gentoo-science
[-- Attachment #1: Type: text/plain, Size: 4041 bytes --]
Unfortunately it seems not have worked. 'nm -D
/usr/lib64/libpynac.so.1.1.0 | grep ZTVN5GiNaC9containerISt6vectorEE' still
just returns nothing.
On Wed, Nov 26, 2014 at 1:02 PM, François Bissey <frp.bissey@gmail.com>
wrote:
> Well first emerge penal with “-fno-fat-lto-objects” and inspect libpynac.so
> for the symbol.
>
> François
>
> > On 26/11/2014, at 19:28, François Bissey <frp.bissey@gmail.com> wrote:
> >
> > I think I will ping pynac upstream to see if they have any idea but I
> think
> > it may be a recurring gcc or a subtle abuse of C++. It would be
> interesting to see
> > if putting -fno-fat-lto-objects would with getting the symbol in pynac.
> There are
> > other things ‘i can think off that may work but need to consult upstream
> and
> > people who know more c++.
> >
> > François
> >
> >> On 26/11/2014, at 18:57, Jeramia Poland <jeramia.poland@gmail.com>
> wrote:
> >>
> >> The output of
> >>
> >> nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
> >> ZTVN5GiNaC9containerISt6vectorEE
> >>
> >> is:
> >>
> >> U _ZTVN5GiNaC9containerISt6vectorEE (with the ZTVN part showing up in
> red)
> >>
> >> The output of
> >>
> >> nm -D /usr/lib64/libpynac.so.1.1.0 | grep
> ZTVN5GiNaC9containerISt6vectorEE
> >>
> >> is:
> >>
> >> (nothing it appears to be missing)
> >>
> >> Output of the third command is attached. The -ffat-lto-objects flag
> should be in there. I added after the first couple of packages (like
> pciutils, elfutils, openssh, etc.) wouldn't build to see if it would help
> so I didn't have to use the "no-lto" environment setting from that graphite
> and lto instruction page I referenced earlier. It didn't see to work as I
> now have a package.env file full of no-lto entries. Neither sage nor pynac
> are no-lto entries right now as it appeared to me that they merged.
> >>
> >> Jeramia
> >>
> >>
> >>
> >> On Wed, Nov 26, 2014 at 2:43 AM, François Bissey <frp.bissey@gmail.com>
> wrote:
> >> I think I have all the logs I can use at the moment. I want the output
> of the
> >> following two commands:
> >> nm -D /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so | grep
> >> ZTVN5GiNaC9containerISt6vectorEE
> >>
> >> nm -D /usr/lib64/libpynac.so.1.1.0 | grep
> ZTVN5GiNaC9containerISt6vectorEE
> >>
> >> Actually make that 3 commands with the output of
> >> readelf -d /usr/lib64/python2.7/site-packages/sage/symbolic/pynac.so
> >>
> >> Also to cross check that I am not missing anything fro your info output,
> >> I cannot see "-ffat-lto-objects" anywhere in your compilation flags.
> >> Is this correct?
> >>
> >> Francois
> >>
> >> On Mon, 24 Nov 2014 19:05:42 François Bissey wrote:
> >>> Hum I am starting to wonder if there are things going on between lot
> and C++
> >>> templates. More professional code may do ok but a lot of the stuff we
> have
> >>> in sage may be a bit dubious. Can you send me the penal build log
> please
> >>> and for good measure the one for sage. You can do it privately if you
> don’t
> >>> want to post big file on the list.
> >>>
> >>> I have been free of grading for almost 4 years. My wife is very happy
> about
> >>> that.
> >>>
> >>> François
> >>>
> >>>> On 24/11/2014, at 17:12, Jeramia Poland <jeramia.poland@gmail.com>
> wrote:
> >>>>
> >>>> Sorry for the delayed reply, I had a bunch of papers to grade. Yes,
> it is
> >>>> installed. Attached are the lld results. Jeramia
> >>>>
> >>>> On Sun, Nov 23, 2014 at 1:20 AM, François Bissey <
> frp.bissey@gmail.com>
> >>>> wrote: I hate automated spellchecking, I meant pynac not “penal” I
> >>>> remember turning it off on an iPad after a ludicrous suggestion for
> >>>> lapack.
> >>>>
> >>>> François
> >>>>
> >>>>> On 22/11/2014, at 15:33, François Bissey <frp.bissey@gmail.com>
> wrote:
> >>>>> I assume penal is installed otherwise
> >>>>
> >>>> <lib_link_1.txt><lib_link_2.txt>
> >>
> >>
> >>
> >> <readelf.txt>
>
>
>
[-- Attachment #2: Type: text/html, Size: 5871 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite
2014-11-26 7:39 ` Jeramia Poland
@ 2014-12-01 22:43 ` François Bissey
0 siblings, 0 replies; 12+ messages in thread
From: François Bissey @ 2014-12-01 22:43 UTC (permalink / raw
To: gentoo-science
It appears to be a gcc 4.8.3 issue in that I am not encountering the problem
when using gcc 4.9.2. In the meantime I recommend that you confine pynac to
your non-flto list if you have one.
Francois
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2014-12-01 22:43 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-21 18:09 [gentoo-science] Emerge Sage-doc-6.3 fails 3.16.5-sources gcc-4.8.3 with lto and graphite Jeramia Poland
2014-11-22 2:33 ` François Bissey
2014-11-22 19:50 ` François Bissey
2014-11-24 4:12 ` Jeramia Poland
2014-11-24 6:05 ` François Bissey
2014-11-25 21:13 ` François Bissey
2014-11-26 5:57 ` Jeramia Poland
2014-11-26 6:28 ` François Bissey
2014-11-26 6:44 ` Jeramia Poland
2014-11-26 7:32 ` François Bissey
2014-11-26 7:39 ` Jeramia Poland
2014-12-01 22:43 ` François Bissey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox