ALSA_CARDS='ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci' ALSA_PCM_PLUGINS='adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol' APACHE2_2_DEPEND='=www-servers/apache-2.2*' APACHE2_DEPEND='=www-servers/apache-2*' APACHE2_MODULES='actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias proxy' APACHE2_MOD_CONF= APACHE2_MOD_DEFINE= APACHE2_MOD_FILE= APACHE2_SAFE_MPMS='itk peruser prefork' APACHE2_SAPI_USE='concurrentmodphp threads' APACHE2_VHOST_CONF= APACHE_BASEDIR=/usr/lib/apache2 APACHE_BIN=/usr/sbin/apache2 APACHE_CONFDIR=/etc/apache2 APACHE_CTL=/usr/sbin/apache2ctl APACHE_DEPEND=www-servers/apache APACHE_INCLUDEDIR=/usr/include/apache2 APACHE_MODULESDIR=/usr/lib/apache2/modules APACHE_MODULES_CONFDIR=/etc/apache2/modules.d APACHE_VERSION=2 APACHE_VHOSTS_CONFDIR=/etc/apache2/vhosts.d APXS=/usr/sbin/apxs2 APXS2_ARGS= APXS2_S= ARCH=x86 AT_GNUCONF_UPDATE=no AT_M4DIR= CBUILD=i686-pc-linux-gnu CDEFINE_default=__unix__ CFLAGS='-O2 -march=pentium4 -fomit-frame-pointer -pipe' CFLAGS_default= CGI_SAPI_USE='discard-path force-cgi-redirect' CHOST=i686-pc-linux-gnu CHOST_default=i686-pc-linux-gnu CONCURRENTMODPHP_PATCH=5.2.6_rc1/opt/concurrent_apache_modules.patch CTARGET_default=i686-pc-linux-gnu CVS_RSH=ssh CXXFLAGS='-O2 -march=pentium4 -fomit-frame-pointer -pipe' DEFAULT_ABI=default DEPEND=$'app-admin/php-toolkit apache2? ( =www-servers/apache-2* ) =sys-devel/automake-1.10*\n\t>=sys-devel/autoconf-2.61\n\tsys-devel/libtool adabas? ( >=dev-db/unixODBC-1.8.13 )\n\t\tberkdb? ( =sys-libs/db-4* )\n\t\tbirdstep? ( >=dev-db/unixODBC-1.8.13 )\n\t\tbzip2? ( app-arch/bzip2 )\n\t\tcdb? ( || ( dev-db/cdb dev-db/tinycdb ) )\n\t\tcjk? ( !gd? ( !gd-external? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib ) ) )\n\t\tcrypt? ( >=dev-libs/libmcrypt-2.4 )\n\t\tcurl? ( >=net-misc/curl-7.10.5 )\n\t\tdb2? ( >=dev-db/unixODBC-1.8.13 )\n\t\tdbmaker? ( >=dev-db/unixODBC-1.8.13 )\n\t\tempress? ( >=dev-db/unixODBC-1.8.13 )\n\t\tempress-bcs? ( >=dev-db/unixODBC-1.8.13 )\n\t\tesoob? ( >=dev-db/unixODBC-1.8.13 )\n\t\texif? ( !gd? ( !gd-external? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib ) ) )\n\t\tfdftk? ( app-text/fdftk )\n\t\tfirebird? ( dev-db/firebird )\n\t\tgd? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib )\n\t\tgd-external? ( media-libs/gd )\n\t\tgdbm? ( >=sys-libs/gdbm-1.8.0 )\n\t\tgmp? ( >=dev-libs/gmp-4.1.2 )\n\t\ticonv? ( virtual/libiconv )\n\t\timap? ( virtual/imap-c-client )\n\t\tiodbc? ( dev-db/libiodbc >=dev-db/unixODBC-1.8.13 )\n\t\tkerberos? ( virtual/krb5 )\n\t\tldap? ( !oci8? ( >=net-nds/openldap-1.2.11 ) )\n\t\tldap-sasl? ( !oci8? ( dev-libs/cyrus-sasl >=net-nds/openldap-1.2.11 ) )\n\t\tlibedit? ( || ( sys-freebsd/freebsd-lib dev-libs/libedit ) )\n\t\tmcve? ( >=dev-libs/openssl-0.9.7 )\n\t\tmhash? ( app-crypt/mhash )\n\t\tmssql? ( dev-db/freetds )\n\t\tmysql? ( virtual/mysql )\n\t\tmysqli? ( >=virtual/mysql-4.1 )\n\t\tncurses? ( sys-libs/ncurses )\n\t\tnls? ( sys-devel/gettext )\n\t\toci8-instant-client? ( dev-db/oracle-instantclient-basic )\n\t\todbc? ( >=dev-db/unixODBC-1.8.13 )\n\t\tpostgres? ( >=dev-db/libpq-7.1 )\n\t\tqdbm? ( dev-db/qdbm )\n\t\treadline? ( sys-libs/readline )\n\t\trecode? ( app-text/recode )\n\t\tsapdb? ( >=dev-db/unixODBC-1.8.13 )\n\t\tsharedmem? ( dev-libs/mm )\n\t\tsimplexml? ( >=dev-libs/libxml2-2.6.8 )\n\t\tsnmp? ( >=net-analyzer/net-snmp-5.2 )\n\t\tsoap? ( >=dev-libs/libxml2-2.6.8 )\n\t\tsolid? ( >=dev-db/unixODBC-1.8.13 )\n\t\tspell? ( >=app-text/aspell-0.50 )\n\t\tsqlite? ( =dev-db/sqlite-2* pdo? ( =dev-db/sqlite-3* ) )\n\t\tssl? ( >=dev-libs/openssl-0.9.7 )\n\t\tsybase? ( dev-db/freetds )\n\t\ttidy? ( app-text/htmltidy )\n\t\ttruetype? ( =media-libs/freetype-2* >=media-libs/t1lib-5.0.0 !gd? ( !gd-external? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib ) ) )\n\t\twddx? ( >=dev-libs/libxml2-2.6.8 )\n\t\txml? ( >=dev-libs/libxml2-2.6.8 )\n\t\txmlrpc? ( >=dev-libs/libxml2-2.6.8 virtual/libiconv )\n\t\txmlreader? ( >=dev-libs/libxml2-2.6.8 )\n\t\txmlwriter? ( >=dev-libs/libxml2-2.6.8 )\n\t\txpm? ( x11-libs/libXpm >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib )\n\t\txsl? ( dev-libs/libxslt >=dev-libs/libxml2-2.6.8 )\n\t\tzip? ( sys-libs/zlib )\n\t\tzlib? ( sys-libs/zlib )\n\t\tvirtual/mta\n\t\t!media-libs/libswf\n\t\t>=sys-devel/m4-1.4.3\n\t\t>=sys-devel/libtool-1.5.18' DESCRIPTION='The PHP language runtime engine: CLI, CGI and Apache2 SAPIs.' DESTTREE=/usr DIROPTIONS=-m0755 DOCFILES= EAPI= ELIBC=glibc ELIBTOOL_VERSION=2.0.2 ELT_APPLIED_PATCHES=' 1.5.10 1.5.6' ELT_LTMAIN_SH=/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/work/php-5.2.6RC1/ltmain.sh ELT_PATCH_DIR=/usr/portage/eclass/ELT-patches EPATCH_EXCLUDE= EPATCH_FORCE=no EPATCH_MULTI_MSG='Applying various patches (bugfixes/updates) ...' EPATCH_OPTS='-g0 -E --no-backup-if-mismatch' EPATCH_SINGLE_MSG= EPATCH_SOURCE=/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/work/patch EPATCH_SUFFIX=patch.bz2 EXEOPTIONS=-m0755 FASTBUILD_PATCH=5.2.6_rc1/opt/fastbuild.patch FEATURES='distlocks metadata-transfer sandbox sfperms strict unmerge-orphans userfetch' GCC_PATH=/usr/i686-pc-linux-gnu/gcc-bin/4.1.2 GCC_SPECS= G_BROKEN_FILENAMES=1 G_FILENAME_ENCODING=UTF-8 HOMEPAGE=http://www.php.net/ INHERITED='apache-module depend.apache toolchain-funcs php5_2-sapi portability flag-o-matic versionator multilib libtool phpconfutils db-use autotools eutils php-common-r1' INPUT_DEVICES='keyboard mouse evdev' INSDESTTREE= INSOPTIONS=-m0644 INSTALLED_MPM=prefork INSTALLED_MPM_SAFE=yes IUSE=' cli cgi discard-path force-cgi-redirect concurrentmodphp threads fastbuild apache2 adabas bcmath berkdb birdstep bzip2 calendar cdb cjk crypt ctype curl curlwrappers db2 dbase dbmaker debug doc empress empress-bcs esoob exif frontbase fdftk filter firebird flatfile ftp gd gd-external gdbm gmp hash iconv imap inifile interbase iodbc ipv6 java-external json kerberos ldap ldap-sasl libedit mcve mhash msql mssql mysql mysqli ncurses nls oci8 oci8-instant-client odbc pcntl pcre pdo pic posix postgres qdbm readline reflection recode sapdb session sharedext sharedmem simplexml snmp soap sockets solid spell spl sqlite ssl suhosin sybase sybase-ct sysvipc tidy tokenizer truetype unicode wddx xml xmlreader xmlwriter xmlrpc xpm xsl yaz zip zip-external zlib' KERNEL=linux KERNEL_ABI=default KEYWORDS='alpha amd64 ~arm hppa ia64 ~ppc ppc64 ~s390 ~sh sparc x86 ~x86-fbsd' KV=2.6.20-gentoo-r8 LANG=ru_RU.koi8r LCD_DEVICES='bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text' LDFLAGS_default= LIBDIR_default=lib LIBOPTIONS=-m0644 LICENSE=PHP-3 LINGUAS=ru MAIL=/var/mail/root MAKEOPTS=-j1 MULTILIB_ABIS=default MULTILIB_PATCH=5.2.6_rc1/opt/multilib-search-path.patch MY_PHP_P=php-5.2.6_rc1 MY_PHP_PV=5.2.6_rc1 PDEPEND=$' doc? ( app-doc/php-docs )\n\t\tfilter? ( !dev-php5/pecl-filter )\n\t\tjava-external? ( dev-php5/php-java-bridge )\n\t\tjson? ( !dev-php5/pecl-json )\n\t\tmcve? ( dev-php5/pecl-mcve )\n\t\tpdo? ( !dev-php5/pecl-pdo )\n\t\tsuhosin? ( dev-php5/suhosin )\n\t\tyaz? ( dev-php5/pecl-yaz )\n\t\tzip? ( !dev-php5/pecl-zip )\n\t\tzip-external? ( dev-php5/pecl-zip )' PHPCONFUTILS_AUTO_USE=gd PHPCONFUTILS_MISSING_DEPS='adabas birdstep db2 dbmaker empress empress-bcs esoob frontbase interbase msql oci8 sapdb solid sybase sybase-ct' PHPPR=1 PHP_EXTRA_BRANDING=RC1 PHP_INI_FILE=php.ini PHP_INI_UPSTREAM=php.ini-dist PHP_PACKAGE=1 PHP_PATCHSET_REV=1 PORTAGE_NICENESS=5 PROVIDE='virtual/php virtual/httpd-php' PYTHONPATH=/usr/lib/portage/pym RDEPEND=$'app-admin/php-toolkit apache2? ( =www-servers/apache-2* ) adabas? ( >=dev-db/unixODBC-1.8.13 )\n\t\tberkdb? ( =sys-libs/db-4* )\n\t\tbirdstep? ( >=dev-db/unixODBC-1.8.13 )\n\t\tbzip2? ( app-arch/bzip2 )\n\t\tcdb? ( || ( dev-db/cdb dev-db/tinycdb ) )\n\t\tcjk? ( !gd? ( !gd-external? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib ) ) )\n\t\tcrypt? ( >=dev-libs/libmcrypt-2.4 )\n\t\tcurl? ( >=net-misc/curl-7.10.5 )\n\t\tdb2? ( >=dev-db/unixODBC-1.8.13 )\n\t\tdbmaker? ( >=dev-db/unixODBC-1.8.13 )\n\t\tempress? ( >=dev-db/unixODBC-1.8.13 )\n\t\tempress-bcs? ( >=dev-db/unixODBC-1.8.13 )\n\t\tesoob? ( >=dev-db/unixODBC-1.8.13 )\n\t\texif? ( !gd? ( !gd-external? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib ) ) )\n\t\tfdftk? ( app-text/fdftk )\n\t\tfirebird? ( dev-db/firebird )\n\t\tgd? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib )\n\t\tgd-external? ( media-libs/gd )\n\t\tgdbm? ( >=sys-libs/gdbm-1.8.0 )\n\t\tgmp? ( >=dev-libs/gmp-4.1.2 )\n\t\ticonv? ( virtual/libiconv )\n\t\timap? ( virtual/imap-c-client )\n\t\tiodbc? ( dev-db/libiodbc >=dev-db/unixODBC-1.8.13 )\n\t\tkerberos? ( virtual/krb5 )\n\t\tldap? ( !oci8? ( >=net-nds/openldap-1.2.11 ) )\n\t\tldap-sasl? ( !oci8? ( dev-libs/cyrus-sasl >=net-nds/openldap-1.2.11 ) )\n\t\tlibedit? ( || ( sys-freebsd/freebsd-lib dev-libs/libedit ) )\n\t\tmcve? ( >=dev-libs/openssl-0.9.7 )\n\t\tmhash? ( app-crypt/mhash )\n\t\tmssql? ( dev-db/freetds )\n\t\tmysql? ( virtual/mysql )\n\t\tmysqli? ( >=virtual/mysql-4.1 )\n\t\tncurses? ( sys-libs/ncurses )\n\t\tnls? ( sys-devel/gettext )\n\t\toci8-instant-client? ( dev-db/oracle-instantclient-basic )\n\t\todbc? ( >=dev-db/unixODBC-1.8.13 )\n\t\tpostgres? ( >=dev-db/libpq-7.1 )\n\t\tqdbm? ( dev-db/qdbm )\n\t\treadline? ( sys-libs/readline )\n\t\trecode? ( app-text/recode )\n\t\tsapdb? ( >=dev-db/unixODBC-1.8.13 )\n\t\tsharedmem? ( dev-libs/mm )\n\t\tsimplexml? ( >=dev-libs/libxml2-2.6.8 )\n\t\tsnmp? ( >=net-analyzer/net-snmp-5.2 )\n\t\tsoap? ( >=dev-libs/libxml2-2.6.8 )\n\t\tsolid? ( >=dev-db/unixODBC-1.8.13 )\n\t\tspell? ( >=app-text/aspell-0.50 )\n\t\tsqlite? ( =dev-db/sqlite-2* pdo? ( =dev-db/sqlite-3* ) )\n\t\tssl? ( >=dev-libs/openssl-0.9.7 )\n\t\tsybase? ( dev-db/freetds )\n\t\ttidy? ( app-text/htmltidy )\n\t\ttruetype? ( =media-libs/freetype-2* >=media-libs/t1lib-5.0.0 !gd? ( !gd-external? ( >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib ) ) )\n\t\twddx? ( >=dev-libs/libxml2-2.6.8 )\n\t\txml? ( >=dev-libs/libxml2-2.6.8 )\n\t\txmlrpc? ( >=dev-libs/libxml2-2.6.8 virtual/libiconv )\n\t\txmlreader? ( >=dev-libs/libxml2-2.6.8 )\n\t\txmlwriter? ( >=dev-libs/libxml2-2.6.8 )\n\t\txpm? ( x11-libs/libXpm >=media-libs/jpeg-6b media-libs/libpng sys-libs/zlib )\n\t\txsl? ( dev-libs/libxslt >=dev-libs/libxml2-2.6.8 )\n\t\tzip? ( sys-libs/zlib )\n\t\tzlib? ( sys-libs/zlib )\n\t\tvirtual/mta\n\t\t!media-libs/libswf' RESTRICT= S=/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/work/php-5.2.6RC1 SANDBOX_DENY=/etc/ld.so.preload SANDBOX_PREDICT=:/dev/console:/dev/random:/proc/self/maps:/usr/lib/portage/pym:/usr/lib/python2.0/:/usr/lib/python2.1/:/usr/lib/python2.2/:/usr/lib/python2.3/:/usr/lib/python2.4/:/usr/lib/python2.5/:/usr/lib/python3.0/:/var/cache/edb/dep:/var/db/aliases.db:/var/db/ethers.db:/var/db/group.db:/var/db/hosts.db:/var/db/netgroup.db:/var/db/netmasks.db:/var/db/networks.db:/var/db/passwd.db:/var/db/protocols.db:/var/db/rpc.db:/var/db/services.db:/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/homedir/.: SANDBOX_READ=:/:/dev/shm:/dev/stdin:/var/tmp: SANDBOX_WRITE=:/dev/console:/dev/fd:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/shm/ngpt:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp:/tmp/:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/lib/cf:/usr/lib/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/homedir/.bash_history:/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/homedir/.gconfd/lock: SLOT=5 SRC_URI=$'http://downloads.php.net/ilia/php-5.2.6RC1.tar.bz2\n\thttp://gentoo.longitekk.com/php-patchset-5.2.6_rc1-r1.tar.bz2 suhosin? ( http://gentoo.longitekk.com/suhosin-patch-5.2.5_p20080206-0.9.6.2-gentoo.patch.gz )' SSH_CLIENT='192.168.0.14 35534 65022' SSH_CONNECTION='192.168.0.14 35534 192.168.0.2 65022' SSH_TTY=/dev/pts/7 STAGE1_USE='nptl nptlonly unicode' SUHOSIN_PATCH=suhosin-patch-5.2.5_p20080206-0.9.6.2-gentoo.patch.gz USE='apache2 berkdb cli crypt elibc_glibc gdbm iconv kernel_linux mysql mysqli ncurses nls pcre readline reflection session snmp sockets spl ssl truetype unicode userland_GNU x86 xml zlib' USERLAND=GNU VIDEO_CARDS='apm ark chips cirrus cyrix dummy fbdev glint i128 i740 i810 imstt mach64 mga neomagic nsc nv r128 radeon rendition s3 s3virge savage siliconmotion sis sisusb tdfx tga trident tseng v4l vesa vga via vmware voodoo' WANT_AUTOCONF=2.5 WANT_AUTOMAKE=1.10 _=_RC_GET_KV_CACHE _E_DOCDESTTREE_= _E_EXEDESTTREE_= ___ECLASS_RECUR_MULTILIB=yes ___ECLASS_RECUR_TOOLCHAIN_FUNCS=yes _pipestatus='0 0' conf=php-5.2.6_rc1-r1 i=sapi/apache2handler/config.m4 str='apache-module_pkg_setup: entering function' ELT_find_ltmain_sh () { local x=; local dirlist=; for x in $(find "${S}" -name 'ltmain.sh'); do dirlist="${dirlist} ${x%/*}"; done; echo "${dirlist}" } ELT_libtool_version () { local ltmain_sh=$1; local version=; version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}"); echo "${VERSION}"); [[ -z ${version} ]] && version="0"; echo "${version}" } ELT_try_and_apply_patch () { local ret=0; local file=$1; local patch=$2; if patch -p0 --dry-run "${file}" "${patch}" >&"${T}/elibtool.log"; then einfo " Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ..."; patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >&"${T}/elibtool.log"; ret=$?; export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}"; else ret=1; fi; return "${ret}" } ELT_walk_patches () { local x=; local y=; local ret=1; local file=$1; local patch_set=$2; local patch_dir=; local rem_int_dep=$3; if [[ -n ${patch_set} ]]; then if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]]; then patch_dir="${ELT_PATCH_DIR}/${patch_set}"; else return "${ret}"; fi; for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r); do if [[ -n ${x} && -f ${x} ]]; then if [[ -n ${rem_int_dep} ]]; then sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > "${T}/$$.rem_int_deps.patch"; x="${T}/$$.rem_int_deps.patch"; fi; if ELT_try_and_apply_patch "${file}" "${x}"; then ret=0; break; fi; fi; done; fi; return "${ret}" } VER_major () { [[ -z $1 ]] && return 1; local VER=$@; echo "${VER%%[^[:digit:]]*}" } VER_micro () { [[ -z $1 ]] && return 1; local VER=$@; VER=${VER#*.*.}; echo "${VER%%[^[:digit:]]*}" } VER_minor () { [[ -z $1 ]] && return 1; local VER=$@; VER=${VER#*.}; echo "${VER%%[^[:digit:]]*}" } VER_to_int () { [[ -z $1 ]] && return 1; local VER_MAJOR=$(VER_major "$1"); local VER_MINOR=$(VER_minor "$1"); local VER_MICRO=$(VER_micro "$1"); local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO )); if [[ ${VER_int} -ge 65536 ]]; then echo "${VER_int}"; return 0; fi; echo 1; return 1 } __versionator__test_version_compare () { __versionator_shopt_toggle on; local lt=1 eq=2 gt=3 p q; function __versionator__test_version_compare_t () { version_compare "${1}" "${3}"; local r=$?; [[ ${r} -eq ${2} ]] || echo "FAIL: ${@} (got ${r} exp ${2})" }; echo " 0 $lt 1 1 $lt 2 2 $gt 1 2 $eq 2 0 $eq 0 10 $lt 20 68 $eq 068 068 $gt 67 068 $lt 69 1.0 $lt 2.0 2.0 $eq 2.0 2.0 $gt 1.0 1.0 $gt 0.0 0.0 $eq 0.0 0.0 $lt 1.0 0.1 $lt 0.2 0.2 $eq 0.2 0.3 $gt 0.2 1.2 $lt 2.1 2.1 $gt 1.2 1.2.3 $lt 1.2.4 1.2.4 $gt 1.2.3 1.2.0 $eq 1.2 1.2.1 $gt 1.2 1.2 $lt 1.2.1 1.2b $eq 1.2b 1.2b $lt 1.2c 1.2b $gt 1.2a 1.2b $gt 1.2 1.2 $lt 1.2a 1.3 $gt 1.2a 1.3 $lt 1.3a 1.0_alpha7 $lt 1.0_beta7 1.0_beta $lt 1.0_pre 1.0_pre5 $lt 1.0_rc2 1.0_rc2 $lt 1.0 1.0_p1 $gt 1.0 1.0_p1-r1 $gt 1.0_p1 1.0_alpha6-r1 $gt 1.0_alpha6 1.0_beta6-r1 $gt 1.0_alpha6-r2 1.0_pre1 $lt 1.0-p1 1.0p $gt 1.0_p1 1.0r $gt 1.0-r1 1.6.15 $gt 1.6.10-r2 1.6.10-r2 $lt 1.6.15 " | while read a b c; do [[ -z "${a}${b}${c}" ]] && continue; __versionator__test_version_compare_t "${a}" "${b}" "${c}"; done; for q in "alpha beta pre rc=${lt};${gt}" "p r=${gt};${lt}"; do for p in ${q%%=*}; do local c=${q##*=}; local alt=${c%%;*} agt=${c##*;}; __versionator__test_version_compare_t "1.0" $agt "1.0_${p}"; __versionator__test_version_compare_t "1.0" $agt "1.0_${p}1"; __versionator__test_version_compare_t "1.0" $agt "1.0_${p}068"; __versionator__test_version_compare_t "2.0_${p}" $alt "2.0"; __versionator__test_version_compare_t "2.0_${p}1" $alt "2.0"; __versionator__test_version_compare_t "2.0_${p}068" $alt "2.0"; __versionator__test_version_compare_t "1.0_${p}" $eq "1.0_${p}"; __versionator__test_version_compare_t "0.0_${p}" $lt "0.0_${p}1"; __versionator__test_version_compare_t "666_${p}3" $gt "666_${p}"; __versionator__test_version_compare_t "1_${p}7" $lt "1_${p}8"; __versionator__test_version_compare_t "1_${p}7" $eq "1_${p}7"; __versionator__test_version_compare_t "1_${p}7" $gt "1_${p}6"; __versionator__test_version_compare_t "1_${p}09" $eq "1_${p}9"; done; done; for p in "-r" "_p"; do __versionator__test_version_compare_t "7.2${p}1" $lt "7.2${p}2"; __versionator__test_version_compare_t "7.2${p}2" $gt "7.2${p}1"; __versionator__test_version_compare_t "7.2${p}3" $gt "7.2${p}2"; __versionator__test_version_compare_t "7.2${p}2" $lt "7.2${p}3"; done; __versionator_shopt_toggle off } __versionator_shopt_toggle () { VERSIONATOR_RECURSION=${VERSIONATOR_RECURSION:-0}; case "$1" in "on") if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then VERSIONATOR_OLD_EXTGLOB=$(shopt -p extglob); shopt -s extglob; fi; VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION + 1 )) ;; "off") VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION - 1 )); if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then eval $VERSIONATOR_OLD_EXTGLOB; fi ;; esac; return 0 } _cdrom_locate_file_on_cd () { local mline=""; local showedmsg=0 showjolietmsg=0; while [[ -z ${CDROM_ROOT} ]]; do local i=0; local -a cdset=(${*//:/ }); if [[ -n ${CDROM_SET} ]]; then cdset=(${cdset[${CDROM_SET}]}); fi; while [[ -n ${cdset[${i}]} ]]; do local dir=$(dirname ${cdset[${i}]}); local file=$(basename ${cdset[${i}]}); local point= node= fs= foo=; while read point node fs foo; do [[ " cd9660 iso9660 udf " != *" ${fs} "* ]] && ! [[ ${fs} == "subfs" && ",${opts}," == *",fs=cdfss,"* ]] && continue; point=${point//\040/ }; [[ ! -d ${point}/${dir} ]] && continue; [[ -z $(find "${point}/${dir}" -maxdepth 1 -iname "${file}") ]] && continue; export CDROM_ROOT=${point}; export CDROM_SET=${i}; export CDROM_MATCH=${cdset[${i}]}; return; done <<< "$(get_mounts)"; ((++i)); done; echo; if [[ ${showedmsg} -eq 0 ]]; then if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then if [[ -z ${CDROM_NAME} ]]; then einfo "Please insert+mount the cdrom for ${PN} now !"; else einfo "Please insert+mount the ${CDROM_NAME} cdrom now !"; fi; else if [[ -z ${CDROM_NAME_1} ]]; then einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !"; else local var="CDROM_NAME_${CDROM_CURRENT_CD}"; einfo "Please insert+mount the ${!var} cdrom now !"; fi; fi; showedmsg=1; fi; einfo "Press return to scan for the cd again"; einfo "or hit CTRL+C to abort the emerge."; echo; if [[ ${showjolietmsg} -eq 0 ]]; then showjolietmsg=1; else ewarn "If you are having trouble with the detection"; ewarn "of your CD, it is possible that you do not have"; ewarn "Joliet support enabled in your kernel. Please"; ewarn "check that CONFIG_JOLIET is enabled in your kernel."; ebeep 5; fi; read || die "something is screwed with your system"; done } _elibtoolize () { local opts; local lttest; lttest="$(autotools_check_macro "AC_PROG_LIBTOOL")$(autotools_check_macro "AM_PROG_LIBTOOL")"; [[ -n $lttest ]] || return 0; [[ -f GNUmakefile.am || -f Makefile.am ]] && opts="--automake"; [[ "${USERLAND}" == "Darwin" ]] && LIBTOOLIZE="glibtoolize"; autotools_run_tool ${LIBTOOLIZE:-libtoolize} "$@" ${opts}; eaclocal } _epatch_assert () { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] } _epatch_draw_line () { [[ -z $1 ]] && set "$(printf "%65s" '')"; echo "${1//?/=}" } _filter-hardened () { local f; for f in "$@"; do case "${f}" in -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie) gcc-specs-pie || continue; is-flagq -nopie || append-flags -nopie ;; -fstack-protector) gcc-specs-ssp || continue; is-flagq -fno-stack-protector || append-flags -fno-stack-protector ;; -fstack-protector-all) gcc-specs-ssp-to-all || continue; is-flagq -fno-stack-protector-all || append-flags -fno-stack-protector-all ;; esac; done } _filter-var () { local f x VAR VAL; declare -a new; VAR=$1; shift; eval VAL=\${${VAR}}; for f in ${VAL}; do for x in "$@"; do [[ ${f} == ${x} ]] && continue 2; done; eval new\[\${\#new\[@]}]=\${f}; done; eval export ${VAR}=\${new\[*]} } _gcc-install-dir () { echo "$($(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 ]] } _init_apache2 () { debug-print-function $FUNCNAME $*; APACHE_VERSION="2"; APXS="/usr/sbin/apxs2"; APACHE_BIN="/usr/sbin/apache2"; APACHE_CTL="/usr/sbin/apache2ctl"; APACHE_INCLUDEDIR="/usr/include/apache2"; APACHE_BASEDIR="/usr/$(get_libdir)/apache2"; APACHE_CONFDIR="/etc/apache2"; APACHE_MODULES_CONFDIR="${APACHE_CONFDIR}/modules.d"; APACHE_VHOSTS_CONFDIR="${APACHE_CONFDIR}/vhosts.d"; APACHE_MODULESDIR="${APACHE_BASEDIR}/modules" } _init_no_apache () { debug-print-function $FUNCNAME $*; APACHE_VERSION="0" } _is_flagq () { local x; for x in ${!1}; do [[ ${x} == $2 ]] && return 0; done; return 1 } apache-module_pkg_postinst () { debug-print-function $FUNCNAME $*; if [[ -n "${APACHE2_MOD_DEFINE}" ]]; then local my_opts="-D ${APACHE2_MOD_DEFINE// / -D }"; einfo; einfo "To enable ${PN}, you need to edit your /etc/conf.d/apache2 file and"; einfo "add '${my_opts}' to APACHE2_OPTS."; einfo; fi; if [[ -n "${APACHE2_MOD_CONF}" ]]; then set -- ${APACHE2_MOD_CONF}; einfo; einfo "Configuration file installed as"; einfo " ${APACHE_MODULES_CONFDIR}/$(basename $1).conf"; einfo "You may want to edit it before turning the module on in /etc/conf.d/apache2"; einfo; fi; if [[ -n "${APACHE2_SAFE_MPMS}" ]]; then INSTALLED_MPM="$(${ROOT}/usr/sbin/apxs2 -q MPM_NAME)"; if ! hasq ${INSTALLED_MPM} ${APACHE2_SAFE_MPMS}; then INSTALLED_MPM_UNSAFE="${INSTALLED_MPM_UNSAFE} ${mpm}"; else INSTALLED_MPM_SAFE="${INSTALLED_MPM_SAFE} ${mpm}"; fi; if [[ -n "${INSTALLED_MPM_UNSAFE}" ]]; then ewarn "Your installed MPM will not work with this module (${PN})."; ewarn "Please make sure that you only enable this module"; ewarn "if you are using one of the following MPMs:"; ewarn " ${INSTALLED_MPM_SAFE}"; fi; fi } apache-module_pkg_setup () { debug-print-function $FUNCNAME $*; if [[ -n "${APACHE2_SAFE_MPMS}" ]]; then INSTALLED_MPM="$(${ROOT}/usr/sbin/apxs2 -q MPM_NAME)"; if hasq ${INSTALLED_MPM} ${APACHE2_SAFE_MPMS}; then INSTALLED_MPM_SAFE="yes"; fi; if [[ -z "${INSTALLED_MPM_SAFE}" ]]; then eerror "The module you are trying to install (${PN})"; eerror "will only work with one of the following MPMs:"; eerror " ${APACHE2_SAFE_MPMS}"; eerror "You do not currently have any of these MPMs installed."; eerror "Please re-install apache with the correct mpm-* USE flag set."; die "No safe MPM installed."; fi; fi } apache-module_src_compile () { debug-print-function $FUNCNAME $*; CD_DIR=$(apache_cd_dir); cd "${CD_DIR}" || die "cd ${CD_DIR} failed"; APXS2_ARGS="${APXS2_ARGS:--c ${PN}.c}"; ${APXS} ${APXS2_ARGS} || die "${APXS} ${APXS2_ARGS} failed" } apache-module_src_install () { debug-print-function $FUNCNAME $*; CD_DIR=$(apache_cd_dir); cd "${CD_DIR}" || die "cd ${CD_DIR} failed"; MOD_FILE=$(apache_mod_file); exeinto "${APACHE_MODULESDIR}"; doexe ${MOD_FILE} || die "internal ebuild error: '${MOD_FILE}' not found"; [[ -n "${APACHE2_EXECFILES}" ]] && doexe ${APACHE2_EXECFILES}; if [[ -n "${APACHE2_MOD_CONF}" ]]; then insinto "${APACHE_MODULES_CONFDIR}"; set -- ${APACHE2_MOD_CONF}; newins "${FILESDIR}/${1}.conf" "$(basename ${2:-$1}).conf" || die "internal ebuild error: '${FILESDIR}/${1}.conf' not found"; fi; if [[ -n "${APACHE2_VHOST_CONF}" ]]; then insinto "${APACHE_VHOSTS_CONFDIR}"; set -- ${APACHE2_VHOST_CONF}; newins "${FILESDIR}/${1}.conf" "$(basename ${2:-$1}).conf " || die "internal ebuild error: '${FILESDIR}/${1}.conf' not found"; fi; cd "${S}"; if [[ -n "${DOCFILES}" ]]; then OTHER_DOCS=$(apache_doc_magic); HTML_DOCS=$(apache_doc_magic html); [[ -n "${OTHER_DOCS}" ]] && dodoc ${OTHER_DOCS}; [[ -n "${HTML_DOCS}" ]] && dohtml ${HTML_DOCS}; fi } apache_cd_dir () { debug-print-function $FUNCNAME $*; [[ -n "${APXS2_S}" ]] && CD_DIR="${APXS2_S}"; if [[ -z "${CD_DIR}" ]]; then if [[ -d "${S}/src" ]]; then CD_DIR="${S}/src"; else CD_DIR="${S}"; fi; fi; debug-print apache_cd_dir: "CD_DIR=${CD_DIR}"; echo "${CD_DIR}" } apache_doc_magic () { debug-print-function $FUNCNAME $*; if [[ -n "${DOCFILES}" ]]; then if [[ "x$1" == "xhtml" ]]; then DOCS="`echo ${DOCFILES} | sed -e 's/ /\n/g' | sed -e '/^[^ ]*.html$/ !d'`"; else DOCS="`echo ${DOCFILES} | sed 's, *[^ ]*\+.html, ,g'`"; fi; debug-print apache_doc_magic: "DOCS=${DOCS}"; echo "${DOCS}"; fi } apache_mod_file () { debug-print-function $FUNCNAME $*; [[ -n "${APACHE2_MOD_FILE}" ]] && MOD_FILE="${APACHE2_MOD_FILE}"; [[ -z "${MOD_FILE}" ]] && MOD_FILE="$(apache_cd_dir)/.libs/${PN}.so"; debug-print apache_mod_file: "MOD_FILE=${MOD_FILE}"; echo "${MOD_FILE}" } append-cppflags () { [[ -z $* ]] && return 0; export CPPFLAGS="${CPPFLAGS} $*"; return 0 } append-flags () { [[ -z $* ]] && return 0; export CFLAGS="${CFLAGS} $*"; export CXXFLAGS="${CXXFLAGS} $*"; return 0 } append-ldflags () { [[ -z $* ]] && return 0; export LDFLAGS="${LDFLAGS} $*"; return 0 } append-lfs-flags () { [[ -n $@ ]] && die "append-lfs-flags takes no arguments"; append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE } autotools_check_macro () { [[ -f configure.ac || -f configure.in ]] && WANT_AUTOCONF="2.5" autoconf --trace=$1 2> /dev/null; return 0 } autotools_get_auxdir () { local auxdir_scan_out; auxdir_scan_out=$(autotools_check_macro "AC_CONFIG_AUX_DIR"); [[ -n ${auxdir_scan_out} ]] || return 0; echo ${auxdir_scan_out} | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) { if (match($0, /AC_CONFIG_AUX_DIR:(.*)$/, res)) print res[1] }' | uniq; return 0 } autotools_get_subdirs () { local subdirs_scan_out; subdirs_scan_out=$(autotools_check_macro "AC_CONFIG_SUBDIRS"); [[ -n ${subdirs_scan_out} ]] || return 0; echo "${subdirs_scan_out}" | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) { if (match($0, /AC_CONFIG_SUBDIRS:(.*)$/, res)) print res[1] }' | uniq; return 0 } autotools_run_tool () { if [[ ${EBUILD_PHASE} != "unpack" ]]; then ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase"; fi; local STDERR_TARGET="${T}/$$.out"; local ris; printf "***** $1 *****\n\n" > "${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}"; ebegin "Running $@"; "$@" >> "${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}" 2>&1; ris=$?; eend ${ris}; if [[ ${ris} != 0 && ${NO_FAIL} != 1 ]]; then echo; eerror "Failed Running $1 !"; eerror; eerror "Include in your bugreport the contents of:"; eerror; eerror " ${STDERR_TARGET%/*}/$1-${STDERR_TARGET##*/}"; echo; die "Failed Running $1 !"; fi } bindnow-flags () { ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild" 1>&2; case $($(tc-getLD) -v 2>&1 &1 ${licmsg} <<-EOF ********************************************************** The following license outlines the terms of use of this package. You MUST accept this license for installation to continue. When you are done viewing, hit 'q'. If you CTRL+C out of this, the install will not run! ********************************************************** EOF cat ${lic} >> ${licmsg}; ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}"; einfon "Do you accept the terms of this license (${l})? [yes/no] "; read alic; case ${alic} in yes | Yes | y | Y) return 0 ;; *) echo; echo; echo; eerror "You MUST accept the license to continue! Exiting!"; die "Failed to accept license" ;; esac } create_ml_includes () { local dest=$1; shift; local basedirs=$(create_ml_includes-listdirs "$@"); create_ml_includes-makedestdirs ${dest} ${basedirs}; local file; for file in $(create_ml_includes-allfiles ${basedirs}); do ( echo "/* Autogenerated by create_ml_includes() in multilib.eclass */"; local dir; for dir in ${basedirs}; do if [[ -f ${D}/${dir}/${file} ]]; then echo ""; local sym=$(create_ml_includes-sym_for_dir ${dir} "$@"); if [[ ${sym/=} != "${sym}" ]]; then echo "#if ${sym}"; else if [[ ${sym::1} == "!" ]]; then echo "#ifndef ${sym:1}"; else echo "#ifdef ${sym}"; fi; fi; echo "# include <$(create_ml_includes-absolute ${dir}/${file})>"; echo "#endif /* ${sym} */"; fi; done ) > "${D}/${dest}/${file}"; done } create_ml_includes-absolute () { local dst="$(create_ml_includes-tidy_path $1)"; dst=(${dst//\// }); local i; for ((i=0; i<${#dst[*]}; i++)) do [ "${dst[i]}" == "include" ] && break; done; local strip_upto=$i; for ((i=strip_upto+1; i<${#dst[*]}-1; i++)) do echo -n ${dst[i]}/; done; echo -n ${dst[i]} } create_ml_includes-allfiles () { local basedir file; for basedir in "$@"; do for file in $(find "${D}"/${basedir} -type f); do echo ${file/${D}\/${basedir}\//}; done; done | sort | uniq } create_ml_includes-listdirs () { local dirs; local data; for data in "$@"; do dirs="${dirs} ${data/*:/}"; done; echo ${dirs:1} } create_ml_includes-makedestdirs () { local dest=$1; shift; local basedirs=$@; dodir ${dest}; local basedir; for basedir in ${basedirs}; do local dir; for dir in $(find ${D}/${basedir} -type d); do dodir ${dest}/${dir/${D}\/${basedir}/}; done; done } create_ml_includes-sym_for_dir () { local dir=$1; shift; local data; for data in "$@"; do if [[ ${data} == *:${dir} ]]; then echo ${data/:*/}; return 0; fi; done; echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@"; exit 1 } create_ml_includes-tidy_path () { local removed=$1; if [ -n "${removed}" ]; then while [ "${removed}" != "${removed/\/\//\/}" ]; do removed=${removed/\/\//\/}; done; while [ "${removed}" != "${removed//\/.\//\/}" ]; do removed=${removed//\/.\//\/}; done; [ "${removed##*/}" = "." ] && removed=${removed%/*}; while [ "${removed}" != "${removed//\/..\/}" ]; do local p1="${removed%%\/..\/*}"; local p2="${removed#*\/..\/}"; removed="${p1%\/*}/${p2}"; done; [ "${removed##*/}" = ".." ] && removed=${removed%/*/*}; [ "${removed##*/}" = "" ] && removed=${removed%/*}; echo ${removed}; fi } darwintoolize () { ewarn "darwintoolize() is deprecated, please just use elibtoolize()!"; elibtoolize } db_findver () { if [ $# -ne 1 ]; then eerror "Function db_findver needs one argument" 1>&2; eerror "args given:" 1>&2; for f in $@; do eerror " - \"$@\"" 1>&2; done; return 1; fi; PKG="$(best_version $1)"; VER="$(get_version_component_range 1-2 "${PKG/*db-/}")"; if [ -d /usr/include/db$(db_ver_to_slot "$VER") ]; then einfo "Found db version ${VER}" 1>&2; echo -n "$VER"; return 0; else return 1; fi } db_includedir () { if [ $# -eq 0 ]; then VER="$(db_findver sys-libs/db)" || return 1; VER="$(db_ver_to_slot "$VER")"; echo "include version ${VER}" 1>&2; if [ -d "/usr/include/db${VER}" ]; then echo -n "/usr/include/db${VER}"; return 0; else eerror "sys-libs/db package requested, but headers not found" 1>&2; return 1; fi; else for x in $@; do if VER=$(db_findver "=sys-libs/db-${x}*") && [ -d "/usr/include/db$(db_ver_to_slot $VER)" ]; then echo -n "/usr/include/db$(db_ver_to_slot $VER)"; return 0; fi; done; eerror "No suitable db version found"; return 1; fi } db_libname () { if [ $# -eq 0 ]; then VER="$(db_findver sys-libs/db)" || return 1; if [ -e "/usr/$(get_libdir)/libdb-${VER}.so" ]; then echo -n "db-${VER}"; return 0; else eerror "sys-libs/db package requested, but library not found" 1>&2; return 1; fi; else for x in $@; do if VER=$(db_findver "=sys-libs/db-${x}*"); then if [ -e "/usr/$(get_libdir)/libdb-${VER}.so" ]; then echo -n "db-${VER}"; return 0; fi; fi; done; eerror "No suitable db version found" 1>&2; return 1; fi } db_ver_to_slot () { if [ $# -ne 1 ]; then eerror "Function db_ver_to_slot needs one argument" 1>&2; eerror "args given:" 1>&2; for f in $@; do eerror " - \"$@\"" 1>&2; done; return 1; fi; echo -n "${1/.0/}" } delete_all_version_separators () { __versionator_shopt_toggle on; replace_all_version_separators "" "${1}"; __versionator_shopt_toggle off } delete_version_separator () { __versionator_shopt_toggle on; replace_version_separator "${1}" "" "${2}"; __versionator_shopt_toggle off } dlopen_lib () { if [[ ${ELIBC} != *BSD ]]; then echo "-ldl"; fi } doicon () { ( local i j ret; insinto /usr/share/pixmaps; for i in "$@"; do if [[ -f ${i} ]]; then doins "${i}"; ((ret+=$?)); else if [[ -d ${i} ]]; then for j in "${i}"/*.png; do doins "${j}"; ((ret+=$?)); done; else ((++ret)); fi; fi; done; exit ${ret} ) } domenu () { ( local i j ret=0; insinto /usr/share/applications; for i in "$@"; do if [[ -f ${i} ]]; then doins "${i}"; ((ret+=$?)); else if [[ -d ${i} ]]; then for j in "${i}"/*.desktop; do doins "${j}"; ((ret+=$?)); done; else ((++ret)); fi; fi; done; exit ${ret} ) } eaclocal () { local aclocal_opts; if [[ -n ${AT_M4DIR} ]]; then for x in ${AT_M4DIR}; do case "${x}" in "-I") ;; *) [[ ! -d ${x} ]] && ewarn "eaclocal: '${x}' does not exist"; aclocal_opts="${aclocal_opts} -I ${x}" ;; esac; done; fi; [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && autotools_run_tool aclocal "$@" ${aclocal_opts} } eautoconf () { if [[ ! -f configure.ac && ! -f configure.in ]]; then echo; eerror "No configure.{ac,in} present in '$(pwd | sed -e 's:.*/::')'!"; echo; die "No configure.{ac,in} present!"; fi; autotools_run_tool autoconf "$@" } eautoheader () { [[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0; NO_FAIL=1 autotools_run_tool autoheader "$@" } eautomake () { local extra_opts; local makefile_name; if [[ -f GNUmakefile.am ]]; then makefile_name="GNUmakefile"; else if [[ -f Makefile.am ]]; then makefile_name="Makefile"; else return 0; fi; fi; if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name}.in ]]; then local used_automake; local installed_automake; installed_automake=$(automake --version | head -n 1 | sed -e 's:.*(GNU automake) ::'); used_automake=$(head -n 1 < ${makefile_name}.in | sed -e 's:.*by automake \(.*\) from .*:\1:'); if [[ ${installed_automake} != ${used_automake} ]]; then einfo "Automake used for the package (${used_automake}) differs from"; einfo "the installed version (${installed_automake})."; eautoreconf; return 0; fi; fi; [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS ]] || extra_opts="${extra_opts} --foreign"; autotools_run_tool automake --add-missing --copy ${extra_opts} "$@" } eautoreconf () { local pwd=$(pwd) x auxdir; if [[ -z ${AT_NO_RECURSIVE} ]]; then for x in $(autotools_get_subdirs); do if [[ -d ${x} ]]; then cd "${x}"; AT_NOELIBTOOLIZE="yes" eautoreconf; cd "${pwd}"; fi; done; fi; auxdir=$(autotools_get_auxdir); einfo "Running eautoreconf in '$(pwd)' ..."; [[ -n ${auxdir} ]] && mkdir -p ${auxdir}; eaclocal; if ${LIBTOOLIZE:-libtoolize} -n --install >&/dev/null; then _elibtoolize --copy --force --install; else _elibtoolize --copy --force; fi; eautoconf; eautoheader; FROM_EAUTORECONF="yes" eautomake ${AM_OPTS}; [[ ${AT_NOELIBTOOLIZE} == "yes" ]] && return 0; elibtoolize; return 0 } ebeep () { local n; if [[ -z ${EBEEP_IGNORE} ]]; then for ((n=1 ; n <= ${1:-5} ; n++)) do echo -ne "\a"; sleep 0.1 >&/dev/null; sleep 0,1 >&/dev/null; echo -ne "\a"; sleep 1; done; fi } ecvs_clean () { [[ -z $* ]] && set -- .; find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf; find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf } edos2unix () { echo "$@" | xargs sed -i 's/\r$//' } egetent () { case ${CHOST} in *-darwin*) case "$2" in *[!0-9]*) nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }" ;; *) nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }" ;; esac ;; *-freebsd* | *-dragonfly*) local opts action="user"; [[ $1 == "passwd" ]] || action="group"; if [[ $2 == [[:digit:]]* ]]; then [[ ${action} == "user" ]] && opts="-u" || opts="-g"; fi; pw show ${action} ${opts} "$2" -q ;; *-netbsd* | *-openbsd*) grep "$2:\*:" /etc/$1 ;; *) type -p nscd >&/dev/null && nscd -i "$1"; getent "$1" "$2" ;; esac } egethome () { ent=$(egetent passwd $1); case ${CHOST} in *-darwin* | *-freebsd* | *-dragonfly*) echo ${ent} | cut -d: -f9 ;; *) echo ${ent} | cut -d: -f6 ;; esac } egetshell () { ent=$(egetent passwd "$1"); case ${CHOST} in *-darwin* | *-freebsd* | *-dragonfly*) echo ${ent} | cut -d: -f10 ;; *) echo ${ent} cut -d: -f7 ;; esac } elibtoolize () { local x=; local y=; local do_portage="no"; local do_reversedeps="no"; local do_only_patches="no"; local do_uclibc="yes"; local deptoremove=; local my_dirlist=; local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp"; local start_dir=${PWD}; my_dirlist=$(ELT_find_ltmain_sh); for x in "$@"; do case "${x}" in "--portage") do_portage="yes" ;; "--reverse-deps") do_reversedeps="yes"; elt_patches="${elt_patches} fix-relink" ;; "--patch-only") do_only_patches="yes" ;; "^--remove-internal-dep="*) deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||'); [[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep" ;; "--shallow") if [[ -f ${S}/ltmain.sh ]]; then my_dirlist=${S}; else my_dirlist=; fi ;; "--no-uclibc") do_uclibc="no" ;; *) eerror "Invalid elibtoolize option: ${x}"; die "elibtoolize called with ${x} ??" ;; esac; done; [[ ${do_uclibc} == "yes" ]] && elt_patches="${elt_patches} uclibc-conf uclibc-ltconf"; [[ ${CHOST} == *"-freebsd"* ]] && elt_patches="${elt_patches} fbsd-conf fbsd-ltconf"; [[ ${CHOST} == *"-darwin"* ]] && elt_patches="${elt_patches} darwin-ltconf darwin-ltmain"; for x in ${my_dirlist}; do local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||"); export ELT_APPLIED_PATCHES=; export ELT_LTMAIN_SH="${x}/ltmain.sh"; [[ -f ${x}/.elibtoolized ]] && continue; cd ${x}; einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')"; for y in ${elt_patches}; do local ret=0; case "${y}" in "portage") if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then ELT_walk_patches "${x}/ltmain.sh" "${y}"; ret=$?; fi ;; "rem-int-dep") ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}"; ret=$? ;; "fix-relink") if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]]; then ELT_walk_patches "${x}/ltmain.sh" "${y}"; ret=$?; fi ;; "max_cmd_len") if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]]; then ELT_walk_patches "${x}/ltmain.sh" "${y}"; ret=$?; fi ;; "uclibc-conf") if [[ -e ${x}/configure && -n $(grep 'Transform linux' "${x}/configure") ]]; then ELT_walk_patches "${x}/configure" "${y}"; ret=$?; else if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'Transform linux' "${x}/../configure") ]]; then ELT_walk_patches "${x}/../configure" "${y}"; ret=$?; fi; fi ;; "uclibc-ltconf") if [[ -s ${x}/ltconfig ]]; then ELT_walk_patches "${x}/ltconfig" "${y}"; ret=$?; fi ;; "fbsd-conf") if [[ -e ${x}/configure && -n $(grep 'version_type=freebsd-' "${x}/configure") ]]; then ELT_walk_patches "${x}/configure" "${y}"; ret=$?; else if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'version_type=freebsd-' "${x}/../configure") ]]; then ELT_walk_patches "${x}/../configure" "${y}"; ret=$?; fi; fi ;; "fbsd-ltconf") if [[ -s ${x}/ltconfig ]]; then ELT_walk_patches "${x}/ltconfig" "${y}"; ret=$?; fi ;; "darwin-ltconf") if [[ -s ${x}/ltconfig ]]; then ELT_walk_patches "${x}/ltconfig" "${y}"; ret=$?; fi ;; "install-sh") ELT_walk_patches "${x}/install-sh" "${y}"; ret=$? ;; *) ELT_walk_patches "${x}/ltmain.sh" "${y}"; ret=$? ;; esac; if [[ ${ret} -ne 0 ]]; then case ${y} in "relink") local version=$(ELT_libtool_version "${x}/ltmain.sh"); if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then ewarn " Could not apply relink.patch!"; fi ;; "portage") if [[ ${do_portage} == "yes" ]]; then if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then echo; eerror "Portage patch requested, but failed to apply!"; eerror "Please bug azarah or vapier to add proper patch."; die "Portage patch requested, but failed to apply!"; fi; else if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then :; else local version=$( eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh"); echo "${VERSION}"); echo; eerror "Portage patch failed to apply (ltmain.sh version ${version})!"; eerror "Please bug azarah or vapier to add proper patch."; die "Portage patch failed to apply!"; fi; ELT_APPLIED_PATCHES="portage"; fi ;; "uclibc-"*) [[ ${CHOST} == *"-uclibc" ]] && ewarn " uClibc patch set '${y}' failed to apply!" ;; "fbsd-"*) if [[ ${CHOST} == *"-freebsd"* ]]; then if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux' "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then eerror " FreeBSD patch set '${y}' failed to apply!"; die "FreeBSD patch set '${y}' failed to apply!"; fi; fi ;; "darwin-"*) [[ ${CHOST} == *"-darwin"* ]] && ewarn " Darwin patch set '${y}' failed to apply!" ;; esac; fi; done; if [[ -z ${ELT_APPLIED_PATCHES} ]]; then if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then ewarn "Cannot apply any patches, please file a bug about this"; die; fi; fi; [[ -f ${x}/libtool ]] && rm -f "${x}/libtool"; touch "${x}/.elibtoolized"; done; cd "${start_dir}" } emktemp () { local exe="touch"; [[ $1 == -d ]] && exe="mkdir" && shift; local topdir=$1; if [[ -z ${topdir} ]]; then [[ -z ${T} ]] && topdir="/tmp" || topdir=${T}; fi; if ! type -P mktemp > /dev/null; then local tmp=/; while [[ -e ${tmp} ]]; do tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM}; done; ${exe} "${tmp}" || ${exe} -p "${tmp}"; echo "${tmp}"; else if [[ ${exe} == "touch" ]]; then TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX; else TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX; fi; fi } enewgroup () { case ${EBUILD_PHASE} in unpack | compile | test | install) eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."; eerror "Package fails at QA and at life. Please file a bug."; die "Bad package! enewgroup is only for use in pkg_* functions!" ;; esac; local egroup="$1"; shift; if [ -z "${egroup}" ]; then eerror "No group specified !"; die "Cannot call enewgroup without a group"; fi; if [[ -n $(egetent group "${egroup}") ]]; then return 0; fi; einfo "Adding group '${egroup}' to your system ..."; local opts=; local egid="$1"; shift; if [ ! -z "${egid}" ]; then if [ "${egid}" -gt 0 ]; then if [ -z "`egetent group ${egid}`" ]; then if [[ "${CHOST}" == *-darwin* ]]; then opts="${opts} ${egid}"; else opts="${opts} -g ${egid}"; fi; else egid="next available; requested gid taken"; fi; else eerror "Groupid given but is not greater than 0 !"; die "${egid} is not a valid GID"; fi; else egid="next available"; fi; einfo " - Groupid: ${egid}"; local eextra="$@"; opts="${opts} ${eextra}"; local oldsandbox="${SANDBOX_ON}"; export SANDBOX_ON="0"; case ${CHOST} in *-darwin*) if [ ! -z "${eextra}" ]; then einfo "Extra options are not supported on Darwin/OS X yet"; einfo "Please report the ebuild along with the info below"; einfo "eextra: ${eextra}"; die "Required function missing"; fi; case ${egid} in *[!0-9]*) for ((egid = 101; egid <= 999; egid++)) do [[ -z $(egetent group ${egid}) ]] && break; done ;; esac; dscl . create /groups/${egroup} gid ${egid}; dscl . create /groups/${egroup} passwd '*' ;; *-freebsd* | *-dragonfly*) case ${egid} in *[!0-9]*) for ((egid = 101; egid <= 999; egid++)) do [[ -z $(egetent group ${egid}) ]] && break; done ;; esac; pw groupadd ${egroup} -g ${egid} || die "enewgroup failed" ;; *-netbsd*) case ${egid} in *[!0-9]*) for ((egid = 101; egid <= 999; egid++)) do [[ -z $(egetent group ${egid}) ]] && break; done ;; esac; groupadd -g ${egid} ${egroup} || die "enewgroup failed" ;; *) groupadd ${opts} ${egroup} || die "enewgroup failed" ;; esac; export SANDBOX_ON="${oldsandbox}" } enewuser () { case ${EBUILD_PHASE} in unpack | compile | test | install) eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function."; eerror "Package fails at QA and at life. Please file a bug."; die "Bad package! enewuser is only for use in pkg_* functions!" ;; esac; local euser=$1; shift; if [[ -z ${euser} ]]; then eerror "No username specified !"; die "Cannot call enewuser without a username"; fi; if [[ -n $(egetent passwd "${euser}") ]]; then return 0; fi; einfo "Adding user '${euser}' to your system ..."; local opts=; local euid=$1; shift; if [[ -n ${euid} && ${euid} != -1 ]]; then if [[ ${euid} -gt 0 ]]; then if [[ -n $(egetent passwd ${euid}) ]]; then euid="next"; fi; else eerror "Userid given but is not greater than 0 !"; die "${euid} is not a valid UID"; fi; else euid="next"; fi; if [[ ${euid} == "next" ]]; then for ((euid = 101; euid <= 999; euid++)) do [[ -z $(egetent passwd ${euid}) ]] && break; done; fi; opts="${opts} -u ${euid}"; einfo " - Userid: ${euid}"; local eshell=$1; shift; if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then if [[ ! -e ${ROOT}${eshell} ]]; then eerror "A shell was specified but it does not exist !"; die "${eshell} does not exist in ${ROOT}"; fi; if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then eerror "Do not specify ${eshell} yourself, use -1"; die "Pass '-1' as the shell parameter"; fi; else for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null; do [[ -x ${ROOT}${shell} ]] && break; done; if [[ ${shell} == "/dev/null" ]]; then eerror "Unable to identify the shell to use, proceeding with userland default."; case ${USERLAND} in GNU) shell="/bin/false" ;; BSD) shell="/sbin/nologin" ;; Darwin) shell="/usr/sbin/nologin" ;; *) die "Unable to identify the default shell for userland ${USERLAND}" ;; esac; fi; eshell=${shell}; fi; einfo " - Shell: ${eshell}"; opts="${opts} -s ${eshell}"; local ehome=$1; shift; if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then ehome="/dev/null"; fi; einfo " - Home: ${ehome}"; opts="${opts} -d ${ehome}"; local egroups=$1; shift; if [[ ! -z ${egroups} ]]; then local oldifs=${IFS}; local defgroup="" exgroups=""; export IFS=","; for g in ${egroups}; do export IFS=${oldifs}; if [[ -z $(egetent group "${g}") ]]; then eerror "You must add group ${g} to the system first"; die "${g} is not a valid GID"; fi; if [[ -z ${defgroup} ]]; then defgroup=${g}; else exgroups="${exgroups},${g}"; fi; export IFS=","; done; export IFS=${oldifs}; opts="${opts} -g ${defgroup}"; if [[ ! -z ${exgroups} ]]; then opts="${opts} -G ${exgroups:1}"; fi; else egroups="(none)"; fi; einfo " - Groups: ${egroups}"; local oldsandbox=${SANDBOX_ON}; export SANDBOX_ON="0"; case ${CHOST} in *-darwin*) if [[ -z $@ ]]; then dscl . create /users/${euser} uid ${euid}; dscl . create /users/${euser} shell ${eshell}; dscl . create /users/${euser} home ${ehome}; dscl . create /users/${euser} realname "added by portage for ${PN}"; local oldifs=${IFS}; export IFS=","; for g in ${egroups}; do dscl . merge /groups/${g} users ${euser}; done; export IFS=${oldifs}; else einfo "Extra options are not supported on Darwin yet"; einfo "Please report the ebuild along with the info below"; einfo "eextra: $@"; die "Required function missing"; fi ;; *-freebsd* | *-dragonfly*) if [[ -z $@ ]]; then pw useradd ${euser} ${opts} -c "added by portage for ${PN}" die "enewuser failed"; else einfo " - Extra: $@"; pw useradd ${euser} ${opts} "$@" || die "enewuser failed"; fi ;; *-netbsd*) if [[ -z $@ ]]; then useradd ${opts} ${euser} || die "enewuser failed"; else einfo " - Extra: $@"; useradd ${opts} ${euser} "$@" || die "enewuser failed"; fi ;; *-openbsd*) if [[ -z $@ ]]; then useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} || die "enewuser failed"; else einfo " - Extra: $@"; useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} "$@" || die "enewuser failed"; fi ;; *) if [[ -z $@ ]]; then useradd ${opts} ${euser} -c "added by portage for ${PN}" || die "enewuser failed"; else einfo " - Extra: $@"; useradd ${opts} ${euser} "$@" || die "enewuser failed"; fi ;; esac; if [[ ! -e ${ROOT}/${ehome} ]]; then einfo " - Creating ${ehome} in ${ROOT}"; mkdir -p "${ROOT}/${ehome}"; chown ${euser} "${ROOT}/${ehome}"; chmod 755 "${ROOT}/${ehome}"; fi; export SANDBOX_ON=${oldsandbox} } epatch () { function _epatch_draw_line () { [[ -z $1 ]] && set "$(printf "%65s" '')"; echo "${1//?/=}" }; function _epatch_assert () { local _pipestatus=${PIPESTATUS[*]}; [[ ${_pipestatus// /} -eq 0 ]] }; local PIPE_CMD=""; local STDERR_TARGET="${T}/$$.out"; local PATCH_TARGET="${T}/$$.patch"; local PATCH_SUFFIX=""; local SINGLE_PATCH="no"; local x=""; unset P4CONFIG P4PORT P4USER; if [ "$#" -gt 1 ]; then local m=""; for m in "$@"; do epatch "${m}"; done; return 0; fi; if [ -n "$1" -a -f "$1" ]; then SINGLE_PATCH="yes"; local EPATCH_SOURCE="$1"; local EPATCH_SUFFIX="${1##*\.}"; else if [ -n "$1" -a -d "$1" ]; then if [ "${EPATCH_FORCE}" = "yes" ] && [ -z "${EPATCH_SUFFIX}" ]; then local EPATCH_SOURCE="$1/*"; else local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}"; fi; else if [[ ! -d ${EPATCH_SOURCE} ]] || [[ -n $1 ]]; then if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]; then EPATCH_SOURCE="$1"; fi; echo; eerror "Cannot find \$EPATCH_SOURCE! Value for \$EPATCH_SOURCE is:"; eerror; eerror " ${EPATCH_SOURCE}"; eerror " ( ${EPATCH_SOURCE##*/} )"; echo; die "Cannot find \$EPATCH_SOURCE!"; fi; local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}"; fi; fi; case ${EPATCH_SUFFIX##*\.} in bz2) PIPE_CMD="bzip2 -dc"; PATCH_SUFFIX="bz2" ;; gz | Z | z) PIPE_CMD="gzip -dc"; PATCH_SUFFIX="gz" ;; ZIP | zip) PIPE_CMD="unzip -p"; PATCH_SUFFIX="zip" ;; *) PIPE_CMD="cat"; PATCH_SUFFIX="patch" ;; esac; if [ "${SINGLE_PATCH}" = "no" ]; then einfo "${EPATCH_MULTI_MSG}"; fi; for x in ${EPATCH_SOURCE}; do if [ -f ${x} ] && ( [ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || [ "${EPATCH_FORCE}" = "yes" ] ); then local count=0; local popts="${EPATCH_OPTS}"; local patchname=${x##*/}; if [ -n "${EPATCH_EXCLUDE}" ]; then if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]; then continue; fi; fi; if [ "${SINGLE_PATCH}" = "yes" ]; then if [ -n "${EPATCH_SINGLE_MSG}" ]; then einfo "${EPATCH_SINGLE_MSG}"; else einfo "Applying ${patchname} ..."; fi; else einfo " ${patchname} ..."; fi; echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; while [ "${count}" -lt 5 ]; do _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; if [ "${PATCH_SUFFIX}" != "patch" ]; then echo -n "PIPE_COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; else PATCH_TARGET="${x}"; fi; echo -n "PATCH COMMAND: " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; if [ "${PATCH_SUFFIX}" != "patch" ]; then if ! ( ${PIPE_CMD} ${x} > ${PATCH_TARGET} ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then echo; eerror "Could not extract patch!"; count=5; break; fi; fi; if ( cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f; _epatch_assert ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real; echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real; echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real; echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real; _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real; cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1; _epatch_assert; if [ "$?" -ne 0 ]; then cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; echo; eerror "A dry-run of patch command succeeded, but actually"; eerror "applying the patch failed!"; count=5; fi; rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real; break; fi; count=$((count + 1)); done; if [ "${PATCH_SUFFIX}" != "patch" ]; then rm -f ${PATCH_TARGET}; fi; if [ "${count}" -eq 5 ]; then echo; eerror "Failed Patch: ${patchname} !"; eerror " ( ${PATCH_TARGET} )"; eerror; eerror "Include in your bugreport the contents of:"; eerror; eerror " ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}"; echo; die "Failed Patch: ${patchname}!"; fi; rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}; eend 0; fi; done; if [ "${SINGLE_PATCH}" = "no" ]; then einfo "Done with patching"; fi } epause () { [[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5} } epunt_cxx () { local dir=$1; [[ -z ${dir} ]] && dir=${S}; ebegin "Removing useless C++ checks"; local f; find "${dir}" -name configure | while read f; do patch --no-backup-if-mismatch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null; done; eend 0 } esvn_clean () { [[ -z $* ]] && set -- .; find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf } filter-flags () { _filter-hardened "$@"; _filter-var CFLAGS "$@"; _filter-var CPPFLAGS "$@"; _filter-var CXXFLAGS "$@"; return 0 } filter-ldflags () { _filter-var LDFLAGS "$@"; return 0 } filter-lfs-flags () { [[ -n $@ ]] && die "filter-lfs-flags takes no arguments"; filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE } filter-mfpmath () { local orig_mfpmath new_math prune_math; orig_mfpmath=$(get-flag -mfpmath); new_math=$(get-flag mfpmath); new_math=" ${new_math//,/ } "; prune_math=""; for prune_math in "$@"; do new_math=${new_math/ ${prune_math} / }; done; new_math=$(echo ${new_math}); new_math=${new_math// /,}; if [[ -z ${new_math} ]]; then filter-flags ${orig_mfpmath}; else replace-flags ${orig_mfpmath} -mfpmath=${new_math}; fi; return 0 } find_unpackable_file () { local src=$1; if [[ -z ${src} ]]; then src=${DISTDIR}/${A}; else if [[ -e ${DISTDIR}/${src} ]]; then src=${DISTDIR}/${src}; else if [[ -e ${PWD}/${src} ]]; then src=${PWD}/${src}; else if [[ -e ${src} ]]; then src=${src}; fi; fi; fi; fi; [[ ! -e ${src} ]] && return 1; echo "${src}" } gcc-fullversion () { $(tc-getCC "$@") -dumpversion } gcc-major-version () { gcc-version "$@" | cut -f1 -d. } gcc-micro-version () { gcc-fullversion "$@" | cut -f3 -d. | cut -f1 -d- } gcc-minor-version () { gcc-version "$@" | cut -f2 -d. } gcc-specs-directive () { local directive subdname subdirective; directive="$(_gcc-specs-directive_raw $1)"; while [[ ${directive} == *%\(*\)* ]]; do subdname=${directive/*%\(}; subdname=${subdname/\)*}; subdirective="$(_gcc-specs-directive_raw ${subdname})"; directive="${directive//\%(${subdname})/${subdirective}}"; done; echo "${directive}"; return 0 } gcc-specs-now () { local directive; directive=$(gcc-specs-directive link_command); return $([[ ${directive/\{!nonow:} != ${directive} ]]) } gcc-specs-pie () { local directive; directive=$(gcc-specs-directive cc1); return $([[ ${directive/\{!nopie:} != ${directive} ]]) } gcc-specs-relro () { local directive; directive=$(gcc-specs-directive link_command); return $([[ ${directive/\{!norelro:} != ${directive} ]]) } gcc-specs-ssp () { local directive; directive=$(gcc-specs-directive cc1); return $([[ ${directive/\{!fno-stack-protector:} != ${directive} ]]) } gcc-specs-ssp-to-all () { local directive; directive=$(gcc-specs-directive cc1); return $([[ ${directive/\{!fno-stack-protector-all:} != ${directive} ]]) } gcc-version () { gcc-fullversion "$@" | cut -f1,2 -d. } gen_usr_ldscript () { local lib libdir=$(get_libdir) output_format=""; dodir /usr/${libdir}; output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p'); [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )"; for lib in "$@"; do if [[ ${USERLAND} == "Darwin" ]]; then ewarn "Not creating fake dynamic library for $lib on Darwin;"; ewarn "making a symlink instead."; dosym "/${libdir}/${lib}" "/usr/${libdir}/${lib}"; else cat > "${D}/usr/${libdir}/${lib}" <<-END_LDSCRIPT /* GNU ld script Since Gentoo has critical dynamic libraries in /lib, and the static versions in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we run into linking problems. See bug http://bugs.gentoo.org/4411 for more info. */ ${output_format} GROUP ( /${libdir}/${lib} ) END_LDSCRIPT fi fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}"; done } get-flag () { local f findflag="$1"; for f in ${CFLAGS} ${CXXFLAGS}; do if [ "${f/${findflag}}" != "${f}" ]; then printf "%s\n" "${f/-${findflag}=}"; return 0; fi; done; return 1 } get_abi_ASFLAGS () { get_abi_var ASFLAGS "$@" } get_abi_CDEFINE () { get_abi_var CDEFINE "$@" } get_abi_CFLAGS () { get_abi_var CFLAGS "$@" } get_abi_CHOST () { get_abi_var CHOST "$@" } get_abi_CTARGET () { get_abi_var CTARGET "$@" } get_abi_FAKE_TARGETS () { get_abi_var FAKE_TARGETS "$@" } get_abi_LDFLAGS () { get_abi_var LDFLAGS "$@" } get_abi_LIBDIR () { get_abi_var LIBDIR "$@" } get_abi_var () { local flag=$1; local abi; if [ $# -gt 1 ]; then abi=${2}; else if [ -n "${ABI}" ]; then abi=${ABI}; else if [ -n "${DEFAULT_ABI}" ]; then abi=${DEFAULT_ABI}; else abi="default"; fi; fi; fi; local var="${flag}_${abi}"; echo ${!var} } get_after_major_version () { __versionator_shopt_toggle on; echo $(get_version_component_range 2- "${1:-${PV}}" ); __versionator_shopt_toggle off } get_all_abis () { local order=""; if [[ -z ${MULTILIB_ABIS} ]]; then echo "default"; return 0; fi; for x in ${MULTILIB_ABIS}; do if [[ ${x} != ${DEFAULT_ABI} ]]; then order="${order:+${order} }${x}"; fi; done; order="${order:+${order} }${DEFAULT_ABI}"; echo ${order}; return 0 } get_all_libdirs () { local libdirs="lib"; local abi; local dir; for abi in ${MULTILIB_ABIS}; do [ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})"; done; echo "${libdirs}" } get_all_version_components () { __versionator_shopt_toggle on; local ver_str=${1:-${PV}} result result_idx=0; result=(); if [[ "${VERSIONATOR_CACHE_VER_STR}" == "${ver_str}" ]]; then echo ${VERSIONATOR_CACHE_RESULT}; __versionator_shopt_toggle off; return; fi; export VERSIONATOR_CACHE_VER_STR="${ver_str}"; while [[ -n "$ver_str" ]]; do case "${ver_str:0:1}" in [[:digit:]]) result[$result_idx]="${ver_str%%[^[:digit:]]*}"; ver_str="${ver_str##+([[:digit:]])}"; result_idx=$(($result_idx + 1)) ;; [-_.]) result[$result_idx]="${ver_str:0:1}"; ver_str="${ver_str:1}"; result_idx=$(($result_idx + 1)) ;; [[:alpha:]]) local not_match="${ver_str##+([[:alpha:]])*([[:digit:]])}"; result[$result_idx]=${ver_str:0:$((${#ver_str} - ${#not_match}))}; ver_str="${not_match}"; result_idx=$(($result_idx + 1)) ;; *) result[$result_idx]="${ver_str:0:1}"; ver_str="${ver_str:1}"; result_idx=$(($result_idx + 1)) ;; esac; done; export VERSIONATOR_CACHE_RESULT="${result[@]}"; echo ${result[@]}; __versionator_shopt_toggle off } get_bmake () { if [[ ${USERLAND} == *BSD ]]; then echo make; else if [[ ${USERLAND} == "Darwin" ]]; then echo bsdmake; else echo pmake; fi; fi } get_install_abis () { local order=""; if [[ -z ${MULTILIB_ABIS} ]]; then echo "default"; return 0; fi; if [[ ${EMULTILIB_PKG} == "true" ]]; then for x in ${MULTILIB_ABIS}; do if [[ ${x} != "${DEFAULT_ABI}" ]]; then hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}"; fi; done; hasq ${DEFAULT_ABI} ${ABI_DENY} || order="${ordera} ${DEFAULT_ABI}"; if [[ -n ${ABI_ALLOW} ]]; then local ordera=""; for x in ${order}; do if hasq ${x} ${ABI_ALLOW}; then ordera="${ordera} ${x}"; fi; done; order=${ordera}; fi; else order=${DEFAULT_ABI}; fi; if [[ -z ${order} ]]; then die "The ABI list is empty. Are you using a proper multilib profile? Perhaps your USE flags or MULTILIB_ABIS are too restrictive for this package."; fi; echo ${order}; return 0 } get_last_version_component_index () { __versionator_shopt_toggle on; echo $(( $(get_version_component_count "${1:-${PV}}" ) - 1 )); __versionator_shopt_toggle off } get_libdir () { local CONF_LIBDIR; if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then echo ${CONF_LIBDIR_OVERRIDE}; else get_abi_LIBDIR; fi } get_libdir_override () { if has_multilib_profile; then eerror "get_libdir_override called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"; exit 1; fi; CONF_LIBDIR="$1"; CONF_LIBDIR_OVERRIDE="$1"; LIBDIR_default="$1" } get_libname () { local libname; local ver=$1; case ${CHOST} in *-darwin*) libname="dylib" ;; *) libname="so" ;; esac; if [[ -z $@ ]]; then echo ".${libname}"; else for ver in "$@"; do case ${CHOST} in *-darwin*) echo ".${ver}.${libname}" ;; *) echo ".${libname}.${ver}" ;; esac; done; fi } get_major_version () { __versionator_shopt_toggle on; local c; c=($(get_all_version_components "${1:-${PV}}" )); echo ${c[0]}; __versionator_shopt_toggle off } get_ml_incdir () { local dir=/usr/include; if [[ $# -gt 0 ]]; then incdir=$1; shift; fi; if [[ -z "${MULTILIB_ABIS}" ]]; then echo ${incdir}; return 0; fi; local abi=${ABI-${DEFAULT_ABI}}; if [[ $# -gt 0 ]]; then abi=$1; shift; fi; if [[ -d "${dir}/gentoo-multilib/${abi}" ]]; then echo ${dir}/gentoo-multilib/${abi}; else echo ${dir}; fi } get_mounts () { local point= node= fs= opts= foo=; if [[ $(uname -s) == "Linux" ]]; then while read node point fs opts foo; do echo "${point} ${node} ${fs} ${opts}"; done < /proc/mounts; return; fi; local IFS=' '; LC_ALL=C mount -p | while read node point fs foo; do opts=${fs#* }; fs=${fs%% *}; echo "${point// /\040} ${node// /\040} ${fs%% *} ${opts// /\040}"; done } get_multilibdir () { if has_multilib_profile; then eerror "get_multilibdir called, but it shouldn't be needed with the new multilib approach. Please file a bug at http://bugs.gentoo.org and assign it to eradicator@gentoo.org"; exit 1; fi; echo ${CONF_MULTILIBDIR:=lib32} } get_version_component_count () { __versionator_shopt_toggle on; local a; a=($(get_version_components "${1:-${PV}}" )); echo ${#a[@]}; __versionator_shopt_toggle off } get_version_component_range () { __versionator_shopt_toggle on; local c v="${2:-${PV}}" range="${1}" range_start range_end i=-1 j=0; c=($(get_all_version_components ${v} )); range_start="${range%-*}"; range_start="${range_start:-1}"; range_end="${range#*-}"; range_end="${range_end:-${#c[@]}}"; while (( j < ${range_start} )); do i=$(($i + 1)); [[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return; [[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1)); done; while (( j <= ${range_end} )); do echo -n ${c[$i]}; [[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return; [[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1)); i=$(($i + 1)); done; __versionator_shopt_toggle off } get_version_components () { __versionator_shopt_toggle on; local c="$(get_all_version_components "${1:-${PV}}")"; c=(${c[@]//[-._]/ }); echo ${c[@]}; __versionator_shopt_toggle off } has_apache () { debug-print-function $FUNCNAME $*; if has_version '>=www-servers/apache-2'; then _init_apache2; else _init_no_apache; fi } has_apache_threads () { debug-print-function $FUNCNAME $*; if ! built_with_use www-servers/apache threads; then return; fi; local myflag="${1:-threads}"; if ! use ${myflag}; then echo; eerror "You need to enable USE flag '${myflag}' to build a thread-safe version"; eerror "of ${CATEGORY}/${PN} for use with www-servers/apache"; die "Need missing USE flag '${myflag}'"; fi } has_apache_threads_in () { debug-print-function $FUNCNAME $*; if ! built_with_use www-servers/apache threads; then return; fi; local myforeign="$1"; local myflag="${2:-threads}"; if ! built_with_use ${myforeign} ${myflag}; then echo; eerror "You need to enable USE flag '${myflag}' in ${myforeign} to"; eerror "build a thread-safe version of ${CATEGORY}/${PN} for use"; eerror "with www-servers/apache"; die "Need missing USE flag '${myflag}' in ${myforeign}"; fi } has_hardened () { ewarn "has_hardened: deprecated, please use gcc-specs-{relro,now}()!" 1>&2; test_version_info Hardened && return 0; [[ -f ${GCC_SPECS} && ${GCC_SPECS} != ${GCC_SPECS/hardened/} ]] } has_m32 () { [ "$(tc-arch)" = "amd64" ] && has_multilib_profile && return 0; local temp=$(emktemp); echo "int main() { return(0); }" > "${temp}".c; MY_CC=$(tc-getCC); ${MY_CC/ .*/} -m32 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1; local ret=$?; rm -f "${temp}".c; [[ ${ret} != 1 ]] && return 0; return 1 } has_m64 () { local temp="$(emktemp)"; echo "int main() { return(0); }" > "${temp}".c; MY_CC=$(tc-getCC); ${MY_CC/ .*/} -m64 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1; local ret=$?; rm -f "${temp}".c; [[ ${ret} != 1 ]] && return 0; return 1 } has_multilib_profile () { [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ] } has_pic () { ewarn "has_pic: deprecated, please use gcc-specs-pie()!" 1>&2; [[ ${CFLAGS/-fPIC} != ${CFLAGS} || ${CFLAGS/-fpic} != ${CFLAGS} ]] || gcc-specs-pie } has_pie () { ewarn "has_pie: deprecated, please use gcc-specs-pie()!" 1>&2; [[ ${CFLAGS/-fPIE} != ${CFLAGS} || ${CFLAGS/-fpie} != ${CFLAGS} ]] || gcc-specs-pie } has_ssp () { ewarn "has_ssp: deprecated, please use gcc-specs-ssp()!" 1>&2; [[ ${CFLAGS/-fstack-protector} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP__) ]] || gcc-specs-ssp } has_ssp_all () { ewarn "has_ssp_all: deprecated, please use gcc-specs-ssp()!" 1>&2; [[ ${CFLAGS/-fstack-protector-all} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP_ALL__) ]] || gcc-specs-ssp-all } is-flag () { is-flagq "$@" && echo true } is-flagq () { [[ -n $2 ]] && die "Usage: is-flag "; _is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 } is-ldflag () { is-ldflagq "$@" && echo true } is-ldflagq () { [[ -n $2 ]] && die "Usage: is-ldflag "; _is_flagq LDFLAGS $1 } is-login-disabled () { shell=$(egetshell "$1"); case ${shell} in /bin/false | /usr/bin/false | /sbin/nologin | /usr/sbin/nologin) return 0 ;; *) return 1 ;; esac } is_final_abi () { has_multilib_profile || return 0; local ALL_ABIS=$(get_install_abis); local LAST_ABI=${ALL_ABIS/* /}; [[ ${LAST_ABI} == ${ABI} ]] } make_desktop_entry () { [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1; local exec=${1}; local name=${2:-${PN}}; local icon=${3:-${PN}}; local type=${4}; local path=${5}; if [[ -z ${type} ]]; then local catmaj=${CATEGORY%%-*}; local catmin=${CATEGORY##*-}; case ${catmaj} in app) case ${catmin} in accessibility) type=Accessibility ;; admin) type=System ;; antivirus) type=System ;; arch) type=Archiving ;; backup) type=Archiving ;; cdr) type=DiscBurning ;; dicts) type=Dictionary ;; doc) type=Documentation ;; editors) type=TextEditor ;; emacs) type=TextEditor ;; emulation) type=Emulator ;; laptop) type=HardwareSettings ;; office) type=Office ;; pda) type=PDA ;; vim) type=TextEditor ;; xemacs) type=TextEditor ;; *) type= ;; esac ;; dev) type="Development" ;; games) case ${catmin} in action | fps) type=ActionGame ;; arcade) type=ArcadeGame ;; board) type=BoardGame ;; emulation) type=Emulator ;; kids) type=KidsGame ;; puzzle) type=LogicGame ;; roguelike) type=RolePlaying ;; rpg) type=RolePlaying ;; simulation) type=Simulation ;; sports) type=SportsGame ;; strategy) type=StrategyGame ;; *) type= ;; esac; type="Game;${type}" ;; gnome) type="Gnome;GTK" ;; kde) type="KDE;Qt" ;; mail) type="Network;Email" ;; media) case ${catmin} in gfx) type=Graphics ;; radio) type=Tuner ;; sound) type=Audio ;; tv) type=TV ;; video) type=Video ;; *) type= ;; esac; type="AudioVideo;${type}" ;; net) case ${catmin} in dialup) type=Dialup ;; ftp) type=FileTransfer ;; im) type=InstantMessaging ;; irc) type=IRCClient ;; mail) type=Email ;; news) type=News ;; nntp) type=News ;; p2p) type=FileTransfer ;; *) type= ;; esac; type="Network;${type}" ;; sci) case ${catmin} in astro*) type=Astronomy ;; bio*) type=Biology ;; calc*) type=Calculator ;; chem*) type=Chemistry ;; elec*) type=Electronics ;; geo*) type=Geology ;; math*) type=Math ;; physics) type=Physics ;; visual*) type=DataVisualization ;; *) type= ;; esac; type="Science;${type}" ;; sys) type="System" ;; www) case ${catmin} in client) type=WebBrowser ;; *) type= ;; esac; type="Network" ;; *) type= ;; esac; fi; if [ "${SLOT}" == "0" ]; then local desktop_name="${PN}"; else local desktop_name="${PN}-${SLOT}"; fi; local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop"; cat > "${desktop}" <<-EOF [Desktop Entry] Version=1.0 Name=${name} Type=Application Comment=${DESCRIPTION} Exec=${exec} TryExec=${exec%% *} Icon=${icon} Categories=${type}; EOF [[ -n ${path} ]] && echo "Path=${path}" >> "${desktop}"; ( insinto /usr/share/applications; doins "${desktop}" ) } make_session_desktop () { [[ -z $1 ]] && eerror "make_session_desktop: You must specify the title" && return 1; [[ -z $2 ]] && eerror "make_session_desktop: You must specify the command" && return 1; local title=$1; local command=$2; local desktop=${T}/${wm}.desktop; cat > "${desktop}" <<-EOF [Desktop Entry] Name=${title} Comment=This session logs you into ${title} Exec=${command} TryExec=${command} Type=Application EOF ( insinto /usr/share/xsessions; doins "${desktop}" ) } make_wrapper () { local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5; local tmpwrapper=$(emktemp); cat > "${tmpwrapper}" <> ${phpinisrc}; echo "; MySQL extensions default connection charset settings" >> ${phpinisrc}; echo "mysql.connect_charset = ${phpmycnfcharset}" >> ${phpinisrc}; echo "mysqli.connect_charset = ${phpmycnfcharset}" >> ${phpinisrc}; echo "pdo_mysql.connect_charset = ${phpmycnfcharset}" >> ${phpinisrc}; else echo "" >> ${phpinisrc}; echo "; MySQL extensions default connection charset settings" >> ${phpinisrc}; echo ";mysql.connect_charset = utf8" >> ${phpinisrc}; echo ";mysqli.connect_charset = utf8" >> ${phpinisrc}; echo ";pdo_mysql.connect_charset = utf8" >> ${phpinisrc}; fi; dodir ${PHP_INI_DIR}; insinto ${PHP_INI_DIR}; newins ${phpinisrc} ${PHP_INI_FILE}; dodir ${PHP_EXT_INI_DIR}; dodir ${PHP_EXT_INI_DIR_ACTIVE}; if use sharedext; then for x in `ls "${D}/${PHPEXTDIR}/"*.so | sort`; do inifilename=${x/.so/.ini}; inifilename=`basename ${inifilename}`; echo "extension=`basename ${x}`" >> "${D}/${PHP_EXT_INI_DIR}/${inifilename}"; dosym "${PHP_EXT_INI_DIR}/${inifilename}" "${PHP_EXT_INI_DIR_ACTIVE}/${inifilename}"; done; fi } php5_2-sapi_pkg_postinst () { ewarn "If you have additional third party PHP extensions (such as"; ewarn "dev-php5/phpdbg) you may need to recompile them now."; ewarn; if use sharedext; then ewarn "Make sure to use etc-update or dispatch-conf so that extension-specific"; ewarn "ini files get merged properly"; ewarn; fi; if has kolab ${IUSE} && use kolab; then ewarn "Please note that kolab support is still experimental!"; ewarn "Issues specific to USE=kolab must be reported to Gentoo bugzilla only!"; ewarn; ewarn "Kolab groupware server requires annotations support for IMAP, which is enabled"; ewarn "by a third-party patch. Please do NOT report issues with the imap extension"; ewarn "to bugs.php.net until you have recompiled both PHP and net-libs/c-client"; ewarn "with USE=\"-kolab\" and confirmed that those issues still exist!"; ewarn; fi; ewarn "USE=\"pic\" slows down PHP but has to be enabled on setups where TEXTRELs"; ewarn "are disabled (e.g. when using PaX in the kernel). On hardened profiles this"; ewarn "USE flag is enabled automatically"; ewarn } php5_2-sapi_pkg_setup () { php5_2-sapi_check_use_flags } php5_2-sapi_set_php_ini_dir () { PHP_INI_DIR="/etc/php/${PHPSAPI}-php5"; PHP_EXT_INI_DIR="${PHP_INI_DIR}/ext"; PHP_EXT_INI_DIR_ACTIVE="${PHP_INI_DIR}/ext-active" } php5_2-sapi_src_compile () { destdir=/usr/$(get_libdir)/php5; php5_2-sapi_set_php_ini_dir; cd "${S}"; phpconfutils_init; my_conf="${my_conf} --with-config-file-path=${PHP_INI_DIR} --with-config-file-scan-dir=${PHP_EXT_INI_DIR_ACTIVE} --without-pear"; phpconfutils_extension_enable "bcmath" "bcmath" 1; phpconfutils_extension_with "bz2" "bzip2" 1; phpconfutils_extension_enable "calendar" "calendar" 1; phpconfutils_extension_disable "ctype" "ctype" 0; phpconfutils_extension_with "curl" "curl" 1; phpconfutils_extension_with "curlwrappers" "curlwrappers" 0; phpconfutils_extension_enable "dbase" "dbase" 1; phpconfutils_extension_disable "dom" "xml" 0; phpconfutils_extension_enable "exif" "exif" 1; phpconfutils_extension_with "fbsql" "frontbase" 1; phpconfutils_extension_with "fdftk" "fdftk" 1 "/opt/fdftk-6.0"; phpconfutils_extension_disable "filter" "filter" 0; phpconfutils_extension_enable "ftp" "ftp" 1; phpconfutils_extension_with "gettext" "nls" 1; phpconfutils_extension_with "gmp" "gmp" 1; phpconfutils_extension_disable "hash" "hash" 0; phpconfutils_extension_without "iconv" "iconv" 0; phpconfutils_extension_disable "ipv6" "ipv6" 0; phpconfutils_extension_disable "json" "json" 0; phpconfutils_extension_with "kerberos" "kerberos" 0 "/usr"; phpconfutils_extension_disable "libxml" "xml" 0; phpconfutils_extension_enable "mbstring" "unicode" 1; phpconfutils_extension_with "mcrypt" "crypt" 1; phpconfutils_extension_with "mhash" "mhash" 1; phpconfutils_extension_with "msql" "msql" 1; phpconfutils_extension_with "mssql" "mssql" 1; phpconfutils_extension_with "ncurses" "ncurses" 1; phpconfutils_extension_with "openssl" "ssl" 0; phpconfutils_extension_with "openssl-dir" "ssl" 0 "/usr"; phpconfutils_extension_enable "pcntl" "pcntl" 1; phpconfutils_extension_without "pcre-regex" "pcre" 0; phpconfutils_extension_disable "pdo" "pdo" 0; phpconfutils_extension_with "pgsql" "postgres" 1; phpconfutils_extension_disable "posix" "posix" 0; phpconfutils_extension_with "pspell" "spell" 1; phpconfutils_extension_with "recode" "recode" 1; phpconfutils_extension_disable "reflection" "reflection" 0; phpconfutils_extension_disable "simplexml" "simplexml" 0; phpconfutils_extension_enable "shmop" "sharedmem" 0; phpconfutils_extension_with "snmp" "snmp" 1; phpconfutils_extension_enable "soap" "soap" 1; phpconfutils_extension_enable "sockets" "sockets" 1; phpconfutils_extension_disable "spl" "spl" 0; phpconfutils_extension_with "sybase" "sybase" 1; phpconfutils_extension_with "sybase-ct" "sybase-ct" 1; phpconfutils_extension_enable "sysvmsg" "sysvipc" 1; phpconfutils_extension_enable "sysvsem" "sysvipc" 1; phpconfutils_extension_enable "sysvshm" "sysvipc" 1; phpconfutils_extension_with "tidy" "tidy" 1; phpconfutils_extension_disable "tokenizer" "tokenizer" 0; phpconfutils_extension_enable "wddx" "wddx" 1; phpconfutils_extension_disable "xml" "xml" 0; phpconfutils_extension_disable "xmlreader" "xmlreader" 0; phpconfutils_extension_disable "xmlwriter" "xmlwriter" 0; phpconfutils_extension_with "xmlrpc" "xmlrpc" 1; phpconfutils_extension_with "xsl" "xsl" 1; phpconfutils_extension_enable "zip" "zip" 1; phpconfutils_extension_with "zlib" "zlib" 1; phpconfutils_extension_enable "debug" "debug" 0; if use cdb || use berkdb || use flatfile || use gdbm || use inifile || use qdbm; then my_conf="${my_conf} --enable-dba${shared}"; fi; phpconfutils_extension_with "cdb" "cdb" 0; phpconfutils_extension_with "db4" "berkdb" 0; phpconfutils_extension_with "flatfile" "flatfile" 0; phpconfutils_extension_with "gdbm" "gdbm" 0; phpconfutils_extension_with "inifile" "inifile" 0; phpconfutils_extension_with "qdbm" "qdbm" 0; if use gd-external || phpconfutils_usecheck gd-external; then phpconfutils_extension_with "freetype-dir" "truetype" 0 "/usr"; phpconfutils_extension_with "t1lib" "truetype" 0 "/usr"; phpconfutils_extension_enable "gd-jis-conv" "cjk" 0; phpconfutils_extension_with "gd" "gd-external" 1 "/usr"; else phpconfutils_extension_with "freetype-dir" "truetype" 0 "/usr"; phpconfutils_extension_with "t1lib" "truetype" 0 "/usr"; phpconfutils_extension_enable "gd-jis-conv" "cjk" 0; phpconfutils_extension_with "jpeg-dir" "gd" 0 "/usr"; phpconfutils_extension_with "png-dir" "gd" 0 "/usr"; phpconfutils_extension_with "xpm-dir" "xpm" 0 "/usr"; phpconfutils_extension_with "gd" "gd" 0; fi; if use imap || phpconfutils_usecheck imap; then phpconfutils_extension_with "imap" "imap" 1; phpconfutils_extension_with "imap-ssl" "ssl" 0; fi; if use interbase; then my_conf="${my_conf} --with-interbase=/opt"; fi; if use firebird; then my_conf="${my_conf} --with-interbase=/usr"; fi; if use ldap || phpconfutils_usecheck ldap; then if use oci8; then phpconfutils_extension_with "ldap" "ldap" 1 "${ORACLE_HOME}"; else phpconfutils_extension_with "ldap" "ldap" 1; phpconfutils_extension_with "ldap-sasl" "ldap-sasl" 0; fi; fi; if use mysql; then phpconfutils_extension_with "mysql" "mysql" 1 "/usr"; phpconfutils_extension_with "mysql-sock" "mysql" 0 "/var/run/mysqld/mysqld.sock"; fi; phpconfutils_extension_with "mysqli" "mysqli" 1 "/usr/bin/mysql_config"; if use odbc || phpconfutils_usecheck odbc; then phpconfutils_extension_with "unixODBC" "odbc" 1 "/usr"; phpconfutils_extension_with "adabas" "adabas" 1; phpconfutils_extension_with "birdstep" "birdstep" 1; phpconfutils_extension_with "dbmaker" "dbmaker" 1; phpconfutils_extension_with "empress" "empress" 1; if use empress || phpconfutils_usecheck empress; then phpconfutils_extension_with "empress-bcs" "empress-bcs" 0; fi; phpconfutils_extension_with "esoob" "esoob" 1; phpconfutils_extension_with "ibm-db2" "db2" 1; phpconfutils_extension_with "iodbc" "iodbc" 1 "/usr"; phpconfutils_extension_with "sapdb" "sapdb" 1; phpconfutils_extension_with "solid" "solid" 1; fi; if use oci8; then phpconfutils_extension_with "oci8" "oci8" 1; fi; if use oci8-instant-client; then OCI8IC_PKG="`best_version dev-db/oracle-instantclient-basic`"; OCI8IC_PKG="`printf ${OCI8IC_PKG} | sed -e 's|dev-db/oracle-instantclient-basic-||g' | sed -e 's|-r.*||g'`"; phpconfutils_extension_with "oci8" "oci8-instant-client" 1 "instantclient,/usr/lib/oracle/${OCI8IC_PKG}/client/lib"; fi; if use pdo || phpconfutils_usecheck pdo; then phpconfutils_extension_with "pdo-dblib" "mssql" 1; phpconfutils_extension_with "pdo-mysql" "mysql" 1 "/usr"; if use oci8; then phpconfutils_extension_with "pdo-oci" "oci8" 1; fi; if use oci8-instant-client; then OCI8IC_PKG="`best_version dev-db/oracle-instantclient-basic`"; OCI8IC_PKG="`printf ${OCI8IC_PKG} | sed -e 's|dev-db/oracle-instantclient-basic-||g' | sed -e 's|-r.*||g'`"; phpconfutils_extension_with "pdo-oci" "oci8-instant-client" 1 "instantclient,/usr,${OCI8IC_PKG}"; fi; phpconfutils_extension_with "pdo-odbc" "odbc" 1 "unixODBC,/usr"; phpconfutils_extension_with "pdo-pgsql" "postgres" 1; phpconfutils_extension_with "pdo-sqlite" "sqlite" 1 "/usr"; fi; phpconfutils_extension_with "readline" "readline" 0; phpconfutils_extension_with "libedit" "libedit" 0; if ! use session && ! phpconfutils_usecheck session; then phpconfutils_extension_disable "session" "session" 0; else phpconfutils_extension_with "mm" "sharedmem" 0; fi; if ! use sqlite && ! phpconfutils_usecheck sqlite; then phpconfutils_extension_without "sqlite" "sqlite" 0; else phpconfutils_extension_with "sqlite" "sqlite" 0 "/usr"; phpconfutils_extension_enable "sqlite-utf8" "unicode" 0; fi; if use pic || phpconfutils_usecheck pic; then einfo "Enabling PIC support"; my_conf="${my_conf} --with-pic"; fi; php_check_cflags; if [[ $(get_libdir) != lib ]]; then my_conf="--with-libdir=$(get_libdir) ${my_conf}"; fi; [[ -z "${EXTRA_ECONF}" ]] && EXTRA_ECONF=""; tc-export CC; ./configure --prefix=${destdir} --host=${CHOST} --mandir=${destdir}/man --infodir=${destdir}/info --sysconfdir=/etc --cache-file=./config.cache ${my_conf} ${EXTRA_ECONF} || die "configure failed"; emake || die "make failed" } php5_2-sapi_src_install () { destdir=/usr/$(get_libdir)/php5; cd "${S}"; addpredict /usr/share/snmp/mibs/.index; make INSTALL_ROOT="${D}" install-build install-headers install-programs || die "make install failed"; if use unicode || phpconfutils_usecheck unicode; then dodir ${destdir}/include/php/ext/mbstring; insinto ${destdir}/include/php/ext/mbstring; for x in `ls "${S}/ext/mbstring/"*.h`; do file=`basename ${x}`; doins ext/mbstring/${file}; done; dodir ${destdir}/include/php/ext/mbstring/oniguruma; insinto ${destdir}/include/php/ext/mbstring/oniguruma; for x in `ls "${S}/ext/mbstring/oniguruma/"*.h`; do file=`basename ${x}`; doins ext/mbstring/oniguruma/${file}; done; dodir ${destdir}/include/php/ext/mbstring/libmbfl/mbfl; insinto ${destdir}/include/php/ext/mbstring/libmbfl/mbfl; for x in `ls "${S}/ext/mbstring/libmbfl/mbfl/"*.h`; do file=`basename ${x}`; doins ext/mbstring/libmbfl/mbfl/${file}; done; fi; [[ -z "${PHPEXTDIR}" ]] && PHPEXTDIR="`"${D}/${destdir}/bin/php-config" --extension-dir`"; if use sharedext; then for x in `ls "${S}/modules/"*.so | sort`; do module=`basename ${x}`; modulename=${module/.so/}; insinto "${PHPEXTDIR}"; einfo "Installing PHP ${modulename} extension"; doins "modules/${module}"; done; fi; phpconfutils_generate_usefile; keepdir /usr/share/php5 } php5_2-sapi_src_unpack () { cd "${S}"; [[ -z "${PHP_EXTRA_BRANDING}" ]] && PHP_EXTRA_BRANDING=""; PHPPR=${PR/r/}; sed -re "s|^(PHP_)?EXTRA_VERSION=\".*\"|\1EXTRA_VERSION=\"${PHP_EXTRA_BRANDING}-pl${PHPPR}-gentoo\"|g" -i configure.in || die "Unable to change PHP branding to ${PHP_EXTRA_BRANDING}-pl${PHPPR}-gentoo"; if [[ -n "${MULTILIB_PATCH}" ]] && [[ -f "${WORKDIR}/${MULTILIB_PATCH}" ]]; then epatch "${WORKDIR}/${MULTILIB_PATCH}"; else ewarn "There is no multilib-strict patch available for this PHP release yet!"; fi; if [[ -d "${WORKDIR}/${MY_PHP_PV}/php5" ]]; then EPATCH_SOURCE="${WORKDIR}/${MY_PHP_PV}/php5" EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" epatch; fi; if [[ -d "${WORKDIR}/${MY_PHP_PV}/${MY_PHP_PV}" ]]; then EPATCH_SOURCE="${WORKDIR}/${MY_PHP_PV}/${MY_PHP_PV}" EPATCH_SUFFIX="patch" EPATCH_FORCE="yes" epatch; fi; sed -e "s/PHP_UNAME=\`uname -a | xargs\`/PHP_UNAME=\`uname -s -n -r -v | xargs\`/g" -i configure.in || die "Failed to fix server platform name"; sed -e 's/'`echo "\!getenv('NO_INTERACTION')"`'/false/g' -i run-tests.php; for i in configure sapi/apache2filter/config.m4 sapi/apache2handler/config.m4; do sed -i.orig -e 's,-i -a -n php5,-i -n php5,g' ${i}; sed -i.orig -e 's,-i -A -n php5,-i -n php5,g' ${i}; done; if has_version "app-crypt/heimdal"; then sed -e 's|gssapi_krb5|gssapi|g' -i acinclude.m4 || die "Failed to fix heimdal libname"; sed -e 's|PHP_ADD_LIBRARY(k5crypto, 1, $1)||g' -i acinclude.m4 || die "Failed to fix heimdal crypt library reference"; fi; if use postgres; then sed -e 's|include/postgresql|include/postgresql include/postgresql/pgsql|g' -i ext/pgsql/config.m4 || die "Failed to fix PostgreSQL include paths"; fi; if use suhosin; then if [[ -n "${SUHOSIN_PATCH}" ]] && [[ -f "${DISTDIR}/${SUHOSIN_PATCH}" ]]; then epatch "${DISTDIR}/${SUHOSIN_PATCH}"; else ewarn "There is no Suhosin patch available for this PHP release yet!"; fi; fi; einfo "Running aclocal"; aclocal --force || die "Unable to run aclocal successfully"; einfo "Running libtoolize"; libtoolize --copy --force || die "Unable to run libtoolize successfully"; einfo "Rebuilding configure script"; autoreconf --force -W no-cross || die "Unable to regenerate configure script successfully"; elibtoolize; chmod 0755 configure || die "Failed to chmod configure to 0755" } php_check_cflags () { replace-cpu-flags "k6*" "i586" } php_check_imap () { if ! use "imap" && ! phpconfutils_usecheck "imap"; then return; fi; if use "ssl" || phpconfutils_usecheck "ssl"; then if ! built_with_use virtual/imap-c-client ssl; then eerror; eerror "IMAP with SSL requested, but your IMAP C-Client libraries are built without SSL!"; eerror; die "Please recompile the IMAP C-Client libraries with SSL support enabled"; fi; else if built_with_use virtual/imap-c-client ssl; then eerror; eerror "IMAP without SSL requested, but your IMAP C-Client libraries are built with SSL!"; eerror; die "Please recompile the IMAP C-Client libraries with SSL support disabled"; fi; fi; if use "kolab" || phpconfutils_usecheck "kolab"; then if ! built_with_use net-libs/c-client kolab; then eerror; eerror "IMAP with annotations support requested, but net-libs/c-client is built without it!"; eerror; die "Please recompile net-libs/c-client with USE=kolab."; fi; fi } php_check_java () { if ! use "java-internal" && ! phpconfutils_usecheck "java-internal"; then return; fi; JDKHOME="$(java-config --jdk-home)"; NOJDKERROR="You need to use the 'java-config' utility to set your JVM to a JDK!"; if [[ -z "${JDKHOME}" ]] || [[ ! -d "${JDKHOME}" ]]; then eerror "${NOJDKERROR}"; die "${NOJDKERROR}"; fi; if echo ${JDKHOME} | grep kaffe > /dev/null 2>&1; then eerror; eerror "PHP will not build using the Kaffe Java Virtual Machine."; eerror "Please change your JVM to either Blackdown or Sun's."; eerror; eerror "To build PHP without Java support, please re-run this emerge"; eerror "and place the line:"; eerror " USE='-java-internal'"; eerror "in front of your emerge command, for example:"; eerror " USE='-java-internal' emerge =dev-lang/php-4*"; eerror; eerror "or edit your USE flags in /etc/make.conf."; die "Kaffe JVM not supported"; fi; JDKVER=$(java-config --java-version 2>&1 | awk '/^java version/ { print $3 }' | xargs ); einfo "Active JDK version: ${JDKVER}"; case "${JDKVER}" in 1.4.*) ;; 1.5.*) ewarn "Java 1.5 is NOT supported at this time, and might not work." ;; *) eerror "A Java 1.4 JDK is recommended for Java support in PHP."; die ;; esac } php_check_mta () { if ! [[ -x "${ROOT}/usr/sbin/sendmail" ]]; then ewarn; ewarn "You need a virtual/mta that provides a sendmail compatible binary!"; ewarn "All major MTAs provide this, and it's usually some symlink created"; ewarn "as '${ROOT}/usr/sbin/sendmail*'. You should also be able to use other"; ewarn "MTAs directly, but you'll have to edit the sendmail_path directive"; ewarn "in your php.ini for this to work."; ewarn; fi } php_check_oracle_8 () { if use "oci8" && [[ -z "${ORACLE_HOME}" ]]; then eerror; eerror "You must have the ORACLE_HOME variable set in your environment to"; eerror "compile the Oracle extension."; eerror; die "Oracle configuration incorrect; user error"; fi; if use "oci8"; then if has_version 'dev-db/oracle-instantclient-basic'; then ewarn; ewarn "Please ensure you have a full install of the Oracle client."; ewarn "'dev-db/oracle-instantclient-basic' is NOT sufficient."; ewarn "Please enable the 'oci8-instant-client' USE flag instead, if you"; ewarn "want to use 'dev-db/oracle-instantclient-basic' as Oracle client."; ewarn; fi; fi } php_check_oracle_all () { if use "oci8" && [[ -z "${ORACLE_HOME}" ]]; then eerror; eerror "You must have the ORACLE_HOME variable set in your environment to"; eerror "compile the Oracle extension."; eerror; die "Oracle configuration incorrect; user error"; fi; if use "oci8" || use "oracle7"; then if has_version 'dev-db/oracle-instantclient-basic'; then ewarn; ewarn "Please ensure you have a full install of the Oracle client."; ewarn "'dev-db/oracle-instantclient-basic' is NOT sufficient."; ewarn "Please enable the 'oci8-instant-client' USE flag instead, if you"; ewarn "want to use 'dev-db/oracle-instantclient-basic' as Oracle client."; ewarn; fi; fi } php_check_pgsql () { if use "postgres" && use "apache2" && use "threads" && has_version ">=dev-db/libpq-8.1.3-r1" && ! built_with_use ">=dev-db/libpq-8.1.3-r1" "threads"; then eerror; eerror "You must build dev-db/libpq with the 'threads' USE flag"; eerror "turned on if you want to build PHP with threads support!"; eerror; die "Rebuild dev-db/libpq with 'threads' USE flag enabled"; fi } php_determine_sapis () { PHPSAPIS=; if use cli || phpconfutils_usecheck cli; then PHPSAPIS="${PHPSAPIS} cli"; fi; if use cgi; then PHPSAPIS="${PHPSAPIS} cgi"; fi; if use apache2; then if [[ "${APACHE_VERSION}" != "0" ]]; then PHPSAPIS="${PHPSAPIS} apache${APACHE_VERSION}"; fi; fi } php_get_mycnf_charset () { if [[ ! -f "${ROOT}/etc/mysql/my.cnf" ]]; then echo "empty"; return; fi; local sapi="${1}"; local section=""; local client_charset=""; local sapi_charset=""; while read line; do line=$(echo "${line}" | sed 's:[;#][^\n]*::g'); if [[ "${line}" == "" ]]; then continue; fi; tmp=$(echo "${line}" | sed 's:\[\([-a-z0-9\_]*\)\]:\1:'); if [[ "${line}" != "${tmp}" ]]; then section=${tmp}; else if [[ "${section}" != "client" && "${section}" != "php-${sapi}" ]]; then continue; fi; tmp=$(echo "${line}" | sed 's|^[[:space:]\ ]*default-character-set[[:space:]\ ]*=[[:space:]\ ]*\"\?\([a-z0-9\-]*\)\"\?|\1|'); if [[ "${line}" == "${tmp}" ]]; then continue; fi; if [[ "${section}" == "client" ]]; then client_charset="${tmp}"; else if [[ "${section}" == "php-${sapi}" ]]; then sapi_charset="${tmp}"; fi; fi; fi; done < "${ROOT}/etc/mysql/my.cnf"; if [[ -n "${sapi_charset}" ]]; then echo "${sapi_charset}"; else if [[ -n "${client_charset}" ]]; then echo "${client_charset}"; else echo "empty"; fi; fi } php_install_java () { if ! use "java-internal" && ! phpconfutils_usecheck "java-internal"; then return; fi; insinto "${PHPEXTDIR}"; einfo "Installing PHP java extension"; doins "modules/java.so"; einfo "Creating PHP java extension symlink"; dosym "${PHPEXTDIR}/java.so" "${PHPEXTDIR}/libphp_java.so"; einfo "Installing JAR for PHP"; doins "ext/java/php_java.jar"; einfo "Installing Java test page"; newins "ext/java/except.php" "java-test.php" } php_install_java_inifile () { if ! use "java-internal" && ! phpconfutils_usecheck "java-internal"; then return; fi; JAVA_LIBRARY="$(grep -- '-DJAVALIB' Makefile | sed -e 's,.\+-DJAVALIB=\"\([^"]*\)\".*$,\1,g;' | sort -u)"; echo "extension = java.so" >> "${D}/${PHP_EXT_INI_DIR}/java.ini"; echo "java.library = ${JAVA_LIBRARY}" >> "${D}/${PHP_EXT_INI_DIR}/java.ini"; echo "java.class.path = ${PHPEXTDIR}/php_java.jar" >> "${D}/${PHP_EXT_INI_DIR}/java.ini"; echo "java.library.path = ${PHPEXTDIR}" >> "${D}/${PHP_EXT_INI_DIR}/java.ini"; dosym "${PHP_EXT_INI_DIR}/java.ini" "${PHP_EXT_INI_DIR_ACTIVE}/java.ini" } phpconfutils_built_with_use () { local opt="$1"; [[ ${opt:0:1} = "-" ]] && shift || opt="-a"; local PHP_PKG=$(best_version $1); shift; local PHP_USEFILE="${ROOT}/var/lib/php-pkg/${PHP_PKG}/PHP_USEFILE"; [[ ! -e "${PHP_USEFILE}" ]] && return 0; local PHP_USE_BUILT=$(<${PHP_USEFILE}); while [[ $# -gt 0 ]]; do if [[ ${opt} = "-o" ]]; then has $1 ${PHP_USE_BUILT} && return 0; else has $1 ${PHP_USE_BUILT} || return 1; fi; shift; done; [[ ${opt} = "-a" ]] } phpconfutils_extension_disable () { if ! use "$2" && ! phpconfutils_usecheck "$2"; then my_conf="${my_conf} --disable-$1"; [[ -n "$3" ]] && einfo " Disabling $1"; else [[ -n "$3" ]] && einfo " Enabling $1"; fi } phpconfutils_extension_enable () { local my_shared; if [[ "$3" == "1" ]]; then if [[ "${shared}+" != "+" ]]; then my_shared="${shared}"; if [[ "$4+" != "+" ]]; then my_shared="${my_shared},$4"; fi; else if [[ "$4+" != "+" ]]; then my_shared="=$4"; fi; fi; else if [[ "$4+" != "+" ]]; then my_shared="=$4"; fi; fi; if use "$2" || phpconfutils_usecheck "$2"; then my_conf="${my_conf} --enable-$1${my_shared}"; einfo " Enabling $1"; else my_conf="${my_conf} --disable-$1"; einfo " Disabling $1"; fi } phpconfutils_extension_with () { local my_shared; if [[ "$3" == "1" ]]; then if [[ "${shared}+" != "+" ]]; then my_shared="${shared}"; if [[ "$4+" != "+" ]]; then my_shared="${my_shared},$4"; fi; else if [[ "$4+" != "+" ]]; then my_shared="=$4"; fi; fi; else if [[ "$4+" != "+" ]]; then my_shared="=$4"; fi; fi; if use "$2" || phpconfutils_usecheck "$2"; then my_conf="${my_conf} --with-$1${my_shared}"; einfo " Enabling $1"; else my_conf="${my_conf} --without-$1"; einfo " Disabling $1"; fi } phpconfutils_extension_without () { if ! use "$2" && ! phpconfutils_usecheck "$2"; then my_conf="${my_conf} --without-$1"; einfo " Disabling $1"; else einfo " Enabling $1"; fi } phpconfutils_generate_usefile () { phpconfutils_sort_flags; local PHP_USEFILE="${D}/var/lib/php-pkg/${CATEGORY}/${PN}-${PVR}/PHP_USEFILE"; dodir "/var/lib/php-pkg/${CATEGORY}/${PN}-${PVR}/"; echo "${PHPCONFUTILS_AUTO_USE}" > "${PHP_USEFILE}" } phpconfutils_init () { if use "sharedext"; then shared="=shared"; else shared=""; fi; phpconfutils_sort_flags } phpconfutils_require_any () { local success_msg="$1"; shift; local fail_msg="$1"; shift; local required_flags="$@"; local default_flag="$1"; local success="0"; while [[ -n "$1" ]]; do if use "$1"; then einfo "${success_msg} $1"; success="1"; else einfo "${fail_msg} $1"; fi; shift; done; if [[ "${success}" == "1" ]]; then return; fi; eerror; eerror "You should enable one or more of the following USE flags:"; eerror " ${required_flags}"; eerror; eerror "You can do this by enabling these flags in /etc/portage/package.use:"; eerror " =${CATEGORY}/${PN}-${PVR} ${required_flags}"; eerror; eerror "The ${default_flag} USE flag was automatically enabled now."; eerror; PHPCONFUTILS_AUTO_USE="${PHPCONFUTILS_AUTO_USE} ${default_flag}" } phpconfutils_sort_flags () { PHPCONFUTILS_AUTO_USE="$(echo ${PHPCONFUTILS_AUTO_USE} | tr '\040\010' '\012\012' | sort -u)" } phpconfutils_use_conflict () { phpconfutils_sort_flags; if ! use "$1" && ! phpconfutils_usecheck "$1"; then return; fi; local my_flag="$1"; shift; local my_present=""; local my_remove=""; while [[ "$1+" != "+" ]]; do if use "$1" || phpconfutils_usecheck "$1"; then my_present="${my_present} $1"; my_remove="${my_remove} -$1"; fi; shift; done; if [[ -n "${my_present}" ]]; then eerror; eerror "USE flag '${my_flag}' conflicts with these USE flag(s):"; eerror " ${my_present}"; eerror; eerror "You must disable these conflicting flags before you can emerge this package."; eerror "You can do this by disabling these flags in /etc/portage/package.use:"; eerror " =${CATEGORY}/${PN}-${PVR} ${my_remove}"; eerror; die "Conflicting USE flags found"; fi } phpconfutils_use_depend_all () { phpconfutils_sort_flags; if ! use "$1" && ! phpconfutils_usecheck "$1"; then return; fi; local my_flag="$1"; shift; local my_missing=""; while [[ "$1+" != "+" ]]; do if ! use "$1" && ! phpconfutils_usecheck "$1"; then my_missing="${my_missing} $1"; fi; shift; done; if [[ -n "${my_missing}" ]]; then PHPCONFUTILS_AUTO_USE="${PHPCONFUTILS_AUTO_USE} ${my_missing}"; ewarn; ewarn "USE flag '${my_flag}' needs these additional flag(s) set:"; ewarn " ${my_missing}"; ewarn; ewarn "'${my_missing}' was automatically enabled and the required extensions will be"; ewarn "built. In any case it is recommended to enable those flags for"; ewarn "future reference, by adding the following to /etc/portage/package.use:"; ewarn " =${CATEGORY}/${PN}-${PVR} ${my_missing}"; ewarn; fi } phpconfutils_use_depend_any () { phpconfutils_sort_flags; if ! use "$1" && ! phpconfutils_usecheck "$1"; then return; fi; local my_flag="$1"; shift; local my_default_flag="$1"; shift; local my_found=""; local my_missing=""; while [[ "$1+" != "+" ]]; do if use "$1" || phpconfutils_usecheck "$1"; then my_found="${my_found} $1"; else my_missing="${my_missing} $1"; fi; shift; done; if [[ -z "${my_found}" ]]; then PHPCONFUTILS_AUTO_USE="${PHPCONFUTILS_AUTO_USE} ${my_default_flag}"; ewarn; ewarn "USE flag '${my_flag}' needs one of these additional flag(s) set:"; ewarn " ${my_missing}"; ewarn; ewarn "'${my_default_flag}' was automatically selected and enabled."; ewarn "You can change that by enabling/disabling those flags accordingly"; ewarn "in /etc/portage/package.use."; ewarn; fi } phpconfutils_usecheck () { local x; local use="$1"; for x in ${PHPCONFUTILS_AUTO_USE}; do if [[ "${use}+" == "${x}+" ]]; then return 0; fi; done; return 1 } phpconfutils_warn_about_external_deps () { phpconfutils_sort_flags; local x; local my_found="0"; for x in ${PHPCONFUTILS_MISSING_DEPS}; do if use "${x}" || phpconfutils_usecheck "${x}"; then ewarn "USE flag ${x} enables support for software not present in Portage!"; my_found="1"; fi; done; if [[ "${my_found}" == "1" ]]; then ewarn; ewarn "This ebuild will continue, but if you haven't already installed the"; ewarn "software required to satisfy the list above, this package will probably"; ewarn "fail to compile later on."; ewarn "*DO NOT* file bugs about compile failures or issues you're having"; ewarn "when using one of those flags, as we aren't able to support them."; ewarn "|=|=|=|=|=|=| You are on your own if you use them! |=|=|=|=|=|=|"; ewarn; ebeep 5; fi } pkg_nofetch () { [ -z "${SRC_URI}" ] && return; echo "!!! The following are listed in SRC_URI for ${PN}:"; local x; for x in $(echo ${SRC_URI}); do echo "!!! ${x}"; done } pkg_postinst () { if use apache2; then APACHE2_MOD_DEFINE="PHP5"; if use concurrentmodphp; then APACHE2_MOD_CONF="70_mod_php5_concurr"; else APACHE2_MOD_CONF="70_mod_php5"; fi; apache-module_pkg_postinst; fi; if use apache2; then "${ROOT}/usr/sbin/php-select" -t apache2 php5 > /dev/null 2>&1; exitStatus=$?; if [[ ${exitStatus} == 2 ]]; then php-select apache2 php5; else if [[ ${exitStatus} == 4 ]]; then ewarn; ewarn "Apache2 is configured to load a different version of PHP."; ewarn "To make Apache2 use PHP v5, use php-select:"; ewarn; ewarn " php-select apache2 php5"; ewarn; fi; fi; fi; if use cli || phpconfutils_usecheck cli; then "${ROOT}/usr/sbin/php-select" -t php php5 > /dev/null 2>&1; exitStatus=$?; if [[ ${exitStatus} == 5 ]]; then php-select php php5; else if [[ ${exitStatus} == 4 ]]; then ewarn; ewarn "/usr/bin/php links to a different version of PHP."; ewarn "To make /usr/bin/php point to PHP v5, use php-select:"; ewarn; ewarn " php-select php php5"; ewarn; fi; fi; fi; if use cgi; then "${ROOT}/usr/sbin/php-select" -t php-cgi php5 > /dev/null 2>&1; exitStatus=$?; if [[ ${exitStatus} == 5 ]]; then php-select php-cgi php5; else if [[ ${exitStatus} == 4 ]]; then ewarn; ewarn "/usr/bin/php-cgi links to a different version of PHP."; ewarn "To make /usr/bin/php-cgi point to PHP v5, use php-select:"; ewarn; ewarn " php-select php-cgi php5"; ewarn; fi; fi; fi; "${ROOT}/usr/sbin/php-select" -t php-devel php5 > /dev/null 2>&1; exitStatus=$?; if [[ $exitStatus == 5 ]]; then php-select php-devel php5; else if [[ $exitStatus == 4 ]]; then ewarn; ewarn "/usr/bin/php-config and/or /usr/bin/phpize are linked to a"; ewarn "different version of PHP. To make them point to PHP v5, use"; ewarn "php-select:"; ewarn; ewarn " php-select php-devel php5"; ewarn; fi; fi; php5_2-sapi_pkg_postinst } pkg_setup () { PHPCONFUTILS_AUTO_USE=""; einfo "Determining SAPI(s) to build"; phpconfutils_require_any " Enabled SAPI:" " Disabled SAPI:" cli cgi apache2; if use apache2; then if [[ "${APACHE_VERSION}" != "0" ]]; then if ! use threads; then APACHE2_SAFE_MPMS="itk peruser prefork"; else APACHE2_SAFE_MPMS="event leader metuxmpm perchild threadpool worker"; fi; ewarn; ewarn "If this package fails with a fatal error about Apache2 not having"; ewarn "been compiled with a compatible MPM, this is normally because you"; ewarn "need to toggle the 'threads' USE flag."; ewarn; ewarn "If 'threads' is off, try switching it on."; ewarn "If 'threads' is on, try switching it off."; ewarn; apache-module_pkg_setup; fi; fi; if use apache2; then if [[ "${APACHE_VERSION}" != "0" ]]; then if use concurrentmodphp; then ewarn; ewarn "'concurrentmodphp' makes it possible to load multiple, differently"; ewarn "versioned mod_php's into the same Apache instance. This is done with"; ewarn "a few linker tricks and workarounds, and is not guaranteed to always"; ewarn "work correctly, so use it at your own risk. Especially, do not use"; ewarn "this in conjunction with PHP modules (PECL, ...) other than the ones"; ewarn "you may find in the Portage tree or the PHP Overlay!"; ewarn "This is an experimental feature, so please rebuild PHP"; ewarn "without the 'concurrentmodphp' USE flag if you experience"; ewarn "any problems, and then reproduce any bugs before filing"; ewarn "them in Gentoo's Bugzilla or bugs.php.net."; ewarn "If you have conclusive evidence that a bug directly"; ewarn "derives from 'concurrentmodphp', please file a bug in"; ewarn "Gentoo's Bugzilla only."; ewarn; ebeep 5; fi; fi; fi; if use fastbuild; then ewarn; ewarn "'fastbuild' attempts to build all SAPIs in a single pass."; ewarn "This is an experimental feature, so please rebuild PHP"; ewarn "without the 'fastbuild' USE flag if you experience"; ewarn "any problems, and then reproduce any bugs before filing"; ewarn "them in Gentoo's Bugzilla or bugs.php.net."; ewarn "If you have conclusive evidence that a bug directly"; ewarn "derives from 'fastbuild', please file a bug in"; ewarn "Gentoo's Bugzilla only."; ewarn; fi; php5_2-sapi_pkg_setup } prep_ml_includes () { if [[ $(number_abis) -gt 1 ]]; then local dir; local dirs; local base; if [[ $# -eq 0 ]]; then dirs=/usr/include; else dirs="$@"; fi; for dir in ${dirs}; do base=${T}/gentoo-multilib/${dir}/gentoo-multilib; mkdir -p "${base}"; [[ -d ${base}/${ABI} ]] && rm -rf "${base}/${ABI}"; mv "${D}/${dir}" "${base}/${ABI}"; done; if is_final_abi; then base=${T}/gentoo-multilib; pushd "${base}"; find . | tar -c -T - -f - | tar -x --no-same-owner -f - -C ${D}; popd; set --; for dir in ${dirs}; do set -- "$@" "${dir}"; local abi; for abi in $(get_install_abis); do set -- "$@" "$(get_abi_CDEFINE ${abi}):${dir}/gentoo-multilib/${abi}"; done; create_ml_includes "$@"; done; fi; fi } preserve_old_lib () { if [[ ${EBUILD_PHASE} != "preinst" ]]; then eerror "preserve_old_lib() must be called from pkg_preinst() only"; die "Invalid preserve_old_lib() usage"; fi; [[ -z $1 ]] && die "Usage: preserve_old_lib [more libraries to preserve]"; has preserve-libs ${FEATURES} && return 0; local lib dir; for lib in "$@"; do [[ -e ${ROOT}/${lib} ]] || continue; dir=${lib%/*}; dodir ${dir} || die "dodir ${dir} failed"; cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed"; touch "${D}"/${lib}; done } preserve_old_lib_notify () { if [[ ${EBUILD_PHASE} != "postinst" ]]; then eerror "preserve_old_lib_notify() must be called from pkg_postinst() only"; die "Invalid preserve_old_lib_notify() usage"; fi; has preserve-libs ${FEATURES} && return 0; local lib notice=0; for lib in "$@"; do [[ -e ${ROOT}/${lib} ]] || continue; if [[ ${notice} -eq 0 ]]; then notice=1; ewarn "Old versions of installed libraries were detected on your system."; ewarn "In order to avoid breaking packages that depend on these old libs,"; ewarn "the libraries are not being removed. You need to run revdep-rebuild"; ewarn "in order to remove these old dependencies. If you do not have this"; ewarn "helper program, simply emerge the 'gentoolkit' package."; ewarn; fi; ewarn " # revdep-rebuild --library ${lib##*/}"; done; if [[ ${notice} -eq 1 ]]; then ewarn; ewarn "Once you've finished running revdep-rebuild, it should be safe to"; ewarn "delete the old libraries. Here is a copy & paste for the lazy:"; for lib in "$@"; do ewarn " # rm '${lib}'"; done; fi } raw-ldflags () { local x input="$@"; [[ -z ${input} ]] && input=${LDFLAGS}; set --; for x in ${input}; do x=${x#-Wl,}; set -- "$@" ${x//,/ }; done; echo "$@" } replace-cpu-flags () { local newcpu="$#"; newcpu="${!newcpu}"; while [ $# -gt 1 ]; do replace-flags "-march=${1}" "-march=${newcpu}"; replace-flags "-mcpu=${1}" "-mcpu=${newcpu}"; replace-flags "-mtune=${1}" "-mtune=${newcpu}"; shift; done; return 0 } replace-flags () { [[ $# != 2 ]] && echo && eerror "Usage: replace-flags " && die "replace-flags takes 2 arguments, not $#"; local f fset; declare -a new_CFLAGS new_CXXFLAGS; for fset in CFLAGS CXXFLAGS; do for f in ${!fset}; do [[ ${f} == ${1} ]] && f=${2}; eval new_${fset}\[\${\#new_${fset}\[@]}]=\${f}; done; eval export ${fset}=\${new_${fset}\[*]}; done; return 0 } replace-sparc64-flags () { local SPARC64_CPUS="ultrasparc3 ultrasparc v9"; if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}"; done; else for x in ${SPARC64_CPUS}; do CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}"; done; fi; export CFLAGS CXXFLAGS } replace_all_version_separators () { __versionator_shopt_toggle on; local c; c=($(get_all_version_components "${2:-${PV}}" )); c="${c[@]//[-._]/$1}"; echo ${c// }; __versionator_shopt_toggle off } replace_version_separator () { __versionator_shopt_toggle on; local w i c found=0 v="${3:-${PV}}"; w=${1:-1}; c=($(get_all_version_components ${v} )); if [[ "${w//[[:digit:]]/}" == "${w}" ]]; then for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 )) do if [[ "${c[${i}]}" == "${w}" ]]; then c[${i}]="${2}"; break; fi; done; else for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 )) do if [[ -n "${c[${i}]//[^-._]}" ]]; then found=$(($found + 1)); if [[ "$found" == "${w}" ]]; then c[${i}]="${2}"; break; fi; fi; done; fi; c=${c[@]}; echo ${c// }; __versionator_shopt_toggle off } seq () { local p=$(type -P seq); case $# in 1) min=1 max=$1 step=1 ;; 2) min=$1 max=$2 step=1 ;; 3) min=$1 max=$3 step=$2 ;; *) die "seq called with wrong number of arguments" ;; esac; if [[ -z ${p} ]]; then local reps; if [[ ${step} != 0 ]]; then reps=$(( ($max-$min) / $step +1 )); else reps=0; fi; jot $reps $min $max $step; else "${p}" $min $step $max; fi } setup-allowed-flags () { if [[ -z ${ALLOWED_FLAGS} ]]; then export ALLOWED_FLAGS="-pipe"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -O -O0 -O1 -O2 -mcpu -march -mtune"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fstack-protector -fstack-protector-all"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fbounds-checking"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-PIE -fno-pie -fno-unit-at-a-time"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident"; export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w"; fi; ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all -fno-strict-aliasing -fno-bounds-checking"; ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-3dnow -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16 -msoft-float -mno-soft-float -mhard-float -mno-hard-float -mfpu -mieee -mieee-with-inexact -mschedule -mtls-direct-seg-refs -mno-tls-direct-seg-refs -mflat -mno-flat -mno-faster-structs -mfaster-structs -m32 -m64 -mabi -mlittle-endian -mbig-endian -EL -EB -fPIC -mlive-g0 -mcmodel -mstack-bias -mno-stack-bias -msecure-plt -D*"; export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks"; return 0 } src_compile () { if use fastbuild && [[ -n "${FASTBUILD_PATCH}" ]]; then src_compile_fastbuild; else src_compile_normal; fi } src_compile_fastbuild () { php_determine_sapis; build_cli=0; build_cgi=0; build_apache2=0; my_conf=""; for x in ${PHPSAPIS}; do case ${x} in cli) build_cli=1 ;; cgi) build_cgi=1 ;; apache2) build_apache2=1 ;; esac; done; if [[ ${build_cli} = 1 ]]; then my_conf="${my_conf} --enable-cli"; else my_conf="${my_conf} --disable-cli"; fi; if [[ ${build_cgi} = 1 ]]; then my_conf="${my_conf} --enable-cgi --enable-fastcgi"; phpconfutils_extension_enable "discard-path" "discard-path" 0; phpconfutils_extension_enable "force-cgi-redirect" "force-cgi-redirect" 0; else my_conf="${my_conf} --disable-cgi"; fi; if [[ ${build_apache2} = 1 ]]; then my_conf="${my_conf} --with-apxs2=/usr/sbin/apxs2"; if use threads; then my_conf="${my_conf} --enable-maintainer-zts"; ewarn "Enabling ZTS for Apache2 MPM"; fi; if use concurrentmodphp; then append-ldflags "-Wl,--version-script=${FILESDIR}/php5-ldvs"; fi; fi; php5_2-sapi_src_compile; if [[ ${build_cli} = 1 ]]; then einfo; einfo "Building CLI SAPI"; einfo; sed -e 's|^#define PHP_CONFIG_FILE_PATH.*|#define PHP_CONFIG_FILE_PATH "/etc/php/cli-php5"|g;' -i main/build-defs.h; sed -e 's|^#define PHP_CONFIG_FILE_SCAN_DIR.*|#define PHP_CONFIG_FILE_SCAN_DIR "/etc/php/cli-php5/ext-active"|g;' -i main/build-defs.h; for x in main/main.o main/main.lo main/php_ini.o main/php_ini.lo; do [[ -f ${x} ]] && rm -f ${x}; done; make sapi/cli/php || die "Unable to make CLI SAPI"; cp sapi/cli/php php-cli || die "Unable to copy CLI SAPI"; fi; if [[ ${build_cgi} = 1 ]]; then einfo; einfo "Building CGI SAPI"; einfo; sed -e 's|^#define PHP_CONFIG_FILE_PATH.*|#define PHP_CONFIG_FILE_PATH "/etc/php/cgi-php5"|g;' -i main/build-defs.h; sed -e 's|^#define PHP_CONFIG_FILE_SCAN_DIR.*|#define PHP_CONFIG_FILE_SCAN_DIR "/etc/php/cgi-php5/ext-active"|g;' -i main/build-defs.h; for x in main/main.o main/main.lo main/php_ini.o main/php_ini.lo; do [[ -f ${x} ]] && rm -f ${x}; done; make sapi/cgi/php-cgi || die "Unable to make CGI SAPI"; cp sapi/cgi/php-cgi php-cgi || die "Unable to copy CGI SAPI"; fi; if [[ ${build_apache2} = 1 ]]; then einfo; einfo "Building apache${APACHE_VERSION} SAPI"; einfo; sed -e "s|^#define PHP_CONFIG_FILE_PATH.*|#define PHP_CONFIG_FILE_PATH \"/etc/php/apache${APACHE_VERSION}-php5\"|g;" -i main/build-defs.h; sed -e "s|^#define PHP_CONFIG_FILE_SCAN_DIR.*|#define PHP_CONFIG_FILE_SCAN_DIR \"/etc/php/apache${APACHE_VERSION}-php5/ext-active\"|g;" -i main/build-defs.h; for x in main/main.o main/main.lo main/php_ini.o main/php_ini.lo; do [[ -f ${x} ]] && rm -f ${x}; done; make || die "Unable to make apache${APACHE_VERSION} SAPI"; fi } src_compile_normal () { php_determine_sapis; CLEAN_REQUIRED=0; my_conf=""; if use apache2; then if [[ "${APACHE_VERSION}" != "0" ]]; then if use concurrentmodphp; then append-ldflags "-Wl,--version-script=${FILESDIR}/php5-ldvs"; fi; fi; fi; for x in ${PHPSAPIS}; do if use apache2; then if [[ "${APACHE_VERSION}" != "0" ]]; then if use threads; then my_conf="${my_conf} --enable-maintainer-zts"; ewarn "Enabling ZTS for Apache2 MPM"; fi; fi; fi; if [[ "${CLEAN_REQUIRED}" = 1 ]]; then make clean; fi; PHPSAPI="${x}"; case ${x} in cli) my_conf="${my_conf} --enable-cli --disable-cgi"; php5_2-sapi_src_compile; cp sapi/cli/php php-cli || die "Unable to copy CLI SAPI" ;; cgi) my_conf="${my_conf} --disable-cli --enable-cgi --enable-fastcgi"; phpconfutils_extension_enable "discard-path" "discard-path" 0; phpconfutils_extension_enable "force-cgi-redirect" "force-cgi-redirect" 0; php5_2-sapi_src_compile; cp sapi/cgi/php-cgi php-cgi || die "Unable to copy CGI SAPI" ;; apache2) my_conf="${my_conf} --disable-cli --with-apxs2=/usr/sbin/apxs2"; php5_2-sapi_src_compile ;; esac; CLEAN_REQUIRED=1; my_conf=""; done } src_install () { php_determine_sapis; destdir=/usr/$(get_libdir)/php5; php5_2-sapi_src_install; einfo; einfo "Installing SAPI(s) ${PHPSAPIS}"; einfo; for x in ${PHPSAPIS}; do PHPSAPI="${x}"; case ${x} in cli) einfo "Installing CLI SAPI"; into ${destdir}; newbin php-cli php || die "Unable to install ${x} sapi"; php5_2-sapi_install_ini ;; cgi) einfo "Installing CGI SAPI"; into ${destdir}; dobin php-cgi || die "Unable to install ${x} sapi"; php5_2-sapi_install_ini ;; apache2) einfo "Installing Apache${APACHE_VERSION} SAPI"; make INSTALL_ROOT="${D}" install-sapi || die "Unable to install ${x} SAPI"; if use concurrentmodphp; then einfo "Installing Apache${APACHE_VERSION} config file for PHP5-concurrent (70_mod_php5_concurr.conf)"; insinto ${APACHE_MODULES_CONFDIR}; newins "${FILESDIR}/70_mod_php5_concurr.conf-apache2" "70_mod_php5_concurr.conf"; insinto "/var/lib/php-pkg/${CATEGORY}/${PN}-${PVR}/"; doins "${FILESDIR}/php5-ldvs"; PHPEXTDIR="`"${D}/${destdir}/bin/php-config" --extension-dir`-versioned"; else einfo "Installing Apache${APACHE_VERSION} config file for PHP5 (70_mod_php5.conf)"; insinto ${APACHE_MODULES_CONFDIR}; newins "${FILESDIR}/70_mod_php5.conf-apache2" "70_mod_php5.conf"; fi; php5_2-sapi_install_ini ;; esac; done; newenvd "${FILESDIR}/20php5-envd" "20php5"; sed -e "s|/lib/|/$(get_libdir)/|g" -i "${D}/etc/env.d/20php5" } src_test () { vecho ">>> Test phase [test]: ${CATEGORY}/${PF}"; if [[ ! -x "${S}"/php-cli ]]; then ewarn "Running the php test suite requires USE=cli"; return; fi; export TEST_PHP_EXECUTABLE="${S}"/php-cli; if [[ -x "${S}"/php-cgi ]]; then export TEST_PHP_CGI_EXECUTABLE="${S}"/php-cgi; fi; REPORT_EXIT_STATUS=1 "${S}"/php-cli -n "${S}"/run-tests.php -n; if [[ $? != 0 ]]; then eerror "Not all tests were successful!"; fi } src_unpack () { if [[ "${PHP_PACKAGE}" == 1 ]]; then unpack ${A}; fi; cd "${S}"; if use apache2; then if [[ "${APACHE_VERSION}" != "0" ]]; then if use concurrentmodphp; then if [[ -n "${CONCURRENTMODPHP_PATCH}" ]] && [[ -f "${WORKDIR}/${CONCURRENTMODPHP_PATCH}" ]]; then epatch "${WORKDIR}/${CONCURRENTMODPHP_PATCH}"; else ewarn "There is no concurrent mod_php patch available for this PHP release yet!"; fi; fi; fi; fi; if use fastbuild; then if [[ -n "${FASTBUILD_PATCH}" ]] && [[ -f "${WORKDIR}/${FASTBUILD_PATCH}" ]]; then epatch "${WORKDIR}/${FASTBUILD_PATCH}"; else ewarn "There is no fastbuild patch available for this PHP release yet!"; fi; fi; PHP_EXTRA_BRANDING="RC${PV#*_rc}"; php5_2-sapi_src_unpack; if use cgi; then sed -e "s|test \! -z \"\$(top_builddir)/php-cli\" \&\& test -x \"\$(top_builddir)/php-cli\"|test \! -z \"\$(top_builddir)/php-cli\" \&\& test -x \"\$(top_builddir)/php-cli\" \&\& test \! -z \"\$(top_builddir)/php-cgi\" \&\& test -x \"\$(top_builddir)/php-cgi\"|g" -i Makefile.global; sed -e "s|TEST_PHP_EXECUTABLE=\"\$(top_builddir)/php-cli\"|TEST_PHP_EXECUTABLE=\"\$(top_builddir)/php-cli\" TEST_PHP_CGI_EXECUTABLE=\"\$(top_builddir)/php-cgi\"|g" -i Makefile.global; fi; sed -e 's:/no/such/:.\0:' -i ext/standard/tests/file/005_error.phpt ext/standard/tests/file/006_error.phpt ext/standard/tests/file/touch.phpt; rm ext/standard/tests/general_functions/phpinfo.phpt; rm ext/iconv/tests/bug16069.phpt ext/iconv/tests/iconv_stream_filter.phpt } strip-flags () { local x y flag NEW_CFLAGS NEW_CXXFLAGS; setup-allowed-flags; local NEW_CFLAGS=""; local NEW_CXXFLAGS=""; if has ~$(tc-arch) ${ACCEPT_KEYWORDS}; then ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}"; fi; set -f; for x in ${CFLAGS}; do for y in ${ALLOWED_FLAGS}; do flag=${x%%=*}; if [ "${flag%%${y}}" = "" ]; then NEW_CFLAGS="${NEW_CFLAGS} ${x}"; break; fi; done; done; for x in ${CXXFLAGS}; do for y in ${ALLOWED_FLAGS}; do flag=${x%%=*}; if [ "${flag%%${y}}" = "" ]; then NEW_CXXFLAGS="${NEW_CXXFLAGS} ${x}"; break; fi; done; done; if [ "${CFLAGS/-O}" != "${CFLAGS}" -a "${NEW_CFLAGS/-O}" = "${NEW_CFLAGS}" ]; then NEW_CFLAGS="${NEW_CFLAGS} -O2"; fi; if [ "${CXXFLAGS/-O}" != "${CXXFLAGS}" -a "${NEW_CXXFLAGS/-O}" = "${NEW_CXXFLAGS}" ]; then NEW_CXXFLAGS="${NEW_CXXFLAGS} -O2"; fi; set +f; export CFLAGS="${NEW_CFLAGS}"; export CXXFLAGS="${NEW_CXXFLAGS}"; return 0 } strip-linguas () { local ls newls nols; if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then local op=$1; shift; ls=$(find "$1" -name '*.po' -exec basename {} .po \;); shift; local d f; for d in "$@"; do if [[ ${op} == "-u" ]]; then newls=${ls}; else newls=""; fi; for f in $(find "$d" -name '*.po' -exec basename {} .po \;); do if [[ ${op} == "-i" ]]; then hasq ${f} ${ls} && newls="${newls} ${f}"; else hasq ${f} ${ls} || newls="${newls} ${f}"; fi; done; ls=${newls}; done; else ls="$@"; fi; nols=""; newls=""; for f in ${LINGUAS}; do if hasq ${f} ${ls}; then newls="${newls} ${f}"; else nols="${nols} ${f}"; fi; done; [[ -n ${nols} ]] && ewarn "Sorry, but ${PN} does not support the LINGUAs:" ${nols}; export LINGUAS=${newls:1} } strip-unsupported-flags () { export CFLAGS=$(test-flags-CC ${CFLAGS}); export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS}) } tc-arch () { tc-ninja_magic_to_arch portage "$@" } tc-arch-kernel () { tc-ninja_magic_to_arch kern "$@" } tc-endian () { local host=$1; [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; host=${host%%-*}; case ${host} in alpha*) echo big ;; arm*b*) echo big ;; arm*) echo little ;; cris*) echo little ;; hppa*) echo big ;; i?86*) echo little ;; ia64*) echo little ;; m68*) echo big ;; mips*l*) echo little ;; mips*) echo big ;; powerpc*) echo big ;; s390*) echo big ;; sh*b*) echo big ;; sh*) echo little ;; sparc*) echo big ;; x86_64*) echo little ;; *) echo wtf ;; esac } tc-export () { local var; for var in "$@"; do eval tc-get${var} > /dev/null; done } tc-getAR () { tc-getPROG AR ar "$@" } tc-getAS () { tc-getPROG AS as "$@" } tc-getBUILD_CC () { local v; for v in CC_FOR_BUILD BUILD_CC HOSTCC; do if [[ -n ${!v} ]]; then export BUILD_CC=${!v}; echo "${!v}"; return 0; fi; done; local search=; if [[ -n ${CBUILD} ]]; then search=$(type -p ${CBUILD}-gcc); search=${search##*/}; fi; search=${search:-gcc}; export BUILD_CC=${search}; echo "${search}" } tc-getCC () { tc-getPROG CC gcc "$@" } tc-getCPP () { tc-getPROG CPP cpp "$@" } tc-getCXX () { tc-getPROG CXX g++ "$@" } tc-getF77 () { tc-getPROG F77 f77 "$@" } tc-getF90 () { tc-getPROG F90 gfortran "$@" } tc-getFORTRAN () { tc-getPROG FORTRAN gfortran "$@" } tc-getGCJ () { tc-getPROG GCJ gcj "$@" } tc-getLD () { tc-getPROG LD ld "$@" } tc-getNM () { tc-getPROG NM nm "$@" } tc-getPROG () { local var=$1; local prog=$2; if [[ -n ${!var} ]]; then echo "${!var}"; return 0; fi; local search=; [[ -n $3 ]] && search=$(type -p "$3-${prog}"); [[ -z ${search} && -n ${CHOST} ]] && search=$(type -p "${CHOST}-${prog}"); [[ -n ${search} ]] && prog=${search##*/}; export ${var}=${prog}; echo "${!var}" } tc-getRANLIB () { tc-getPROG RANLIB ranlib "$@" } tc-getSTRIP () { tc-getPROG STRIP strip "$@" } tc-is-cross-compiler () { return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]]) } tc-is-softfloat () { case ${CTARGET} in bfin* | h8300*) echo "only" ;; *) [[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no" ;; esac } tc-ninja_magic_to_arch () { function ninj () { [[ ${type} == "kern" ]] && echo $1 || echo $2 }; local type=$1; local host=$2; [[ -z ${host} ]] && host=${CTARGET:-${CHOST}}; case ${host} in alpha*) echo alpha ;; arm*) echo arm ;; avr*) ninj avr32 avr ;; bfin*) ninj blackfin bfin ;; cris*) echo cris ;; hppa*) ninj parisc hppa ;; i?86*) if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) ]]; then echo i386; else echo x86; fi ;; ia64*) echo ia64 ;; m68*) echo m68k ;; mips*) echo mips ;; nios2*) echo nios2 ;; nios*) echo nios ;; powerpc*) if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]] && [[ ${type} == "kern" ]]; then echo powerpc; else if [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]] && [[ ${type} == "kern" ]]; then if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then echo powerpc; else echo ppc; fi; else if [[ ${host} == powerpc64* ]]; then echo ppc64; else if [[ ${PROFILE_ARCH} == "ppc64" ]]; then ninj ppc64 ppc; else echo ppc; fi; fi; fi; fi ;; s390*) echo s390 ;; sh64*) ninj sh64 sh ;; sh*) echo sh ;; sparc64*) ninj sparc64 sparc ;; sparc*) [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc ;; vax*) echo vax ;; x86_64*) if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then echo x86; else ninj x86_64 amd64; fi ;; *) echo unknown ;; esac } test-flag-CC () { test-flag-PROG "CC" "$1" } test-flag-CXX () { test-flag-PROG "CXX" "$1" } test-flag-PROG () { local comp=$1; local flags="$2"; [[ -z ${comp} || -z ${flags} ]] && return 1; local PROG=$(tc-get${comp}); ${PROG} ${flags} -S -o /dev/null -xc /dev/null > /dev/null 2>&1 } test-flags () { test-flags-CC "$@" } test-flags-CC () { test-flags-PROG "CC" "$@" } test-flags-CXX () { test-flags-PROG "CXX" "$@" } test-flags-PROG () { local comp=$1; local flags; local x; shift; [[ -z ${comp} ]] && return 1; x=""; for x in "$@"; do test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}"; done; echo "${flags}"; [[ -n ${flags} ]] } test_flag () { ewarn "test_flag: deprecated, please use test-flags()!" 1>&2; test-flags-CC "$@" } test_version_info () { if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then return 0; else return 1; fi } treecopy () { dest=${!#}; files_count=$#; while (( $# > 1 )); do dirstruct=$(dirname "$1"); mkdir -p "${dest}/${dirstruct}"; cp -pPR "$1" "${dest}/${dirstruct}"; shift; done } uclibctoolize () { ewarn "uclibctoolize() is deprecated, please just use elibtoolize()!"; elibtoolize } unpack_makeself () { local src_input=${1:-${A}}; local src=$(find_unpackable_file "${src_input}"); local skip=$2; local exe=$3; [[ -z ${src} ]] && die "Could not locate source for '${src_input}'"; local shrtsrc=$(basename "${src}"); echo ">>> Unpacking ${shrtsrc} to ${PWD}"; if [[ -z ${skip} ]]; then local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}'); local skip=0; exe=tail; case ${ver} in 1.5.* | 1.6.0-nv) skip=$(grep -a ^skip= "${src}" | cut -d= -f2) ;; 2.0 | 2.0.1) skip=$(grep -a ^' 'tail "${src}" | awk '{print $2}' | cut -b2-) ;; 2.1.1) skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-); let skip="skip + 1" ;; 2.1.2) skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1); let skip="skip + 1" ;; 2.1.3) skip=`grep -a ^offset= "${src}" | awk '{print $3}'`; let skip="skip + 1" ;; 2.1.4 | 2.1.5) skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1); skip=$(head -n ${skip} "${src}" | wc -c); exe="dd" ;; *) eerror "I'm sorry, but I was unable to support the Makeself file."; eerror "The version I detected was '${ver}'."; eerror "Please file a bug about the file ${shrtsrc} at"; eerror "http://bugs.gentoo.org/ so that support can be added."; die "makeself version '${ver}' not supported" ;; esac; debug-print "Detected Makeself version ${ver} ... using ${skip} as offset"; fi; case ${exe} in tail) exe="tail -n +${skip} '${src}'" ;; dd) exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'" ;; *) die "makeself cant handle exe '${exe}'" ;; esac; local tmpfile=$(emktemp); eval ${exe} 2> /dev/null | head -c 512 > "${tmpfile}"; local filetype=$(file -b "${tmpfile}"); case ${filetype} in *tar\ archive*) eval ${exe} | tar --no-same-owner -xf - ;; bzip2*) eval ${exe} | bzip2 -dc | tar --no-same-owner -xf - ;; gzip*) eval ${exe} | tar --no-same-owner -xzf - ;; compress*) eval ${exe} | gunzip | tar --no-same-owner -xf - ;; *) eerror "Unknown filetype \"${filetype}\" ?"; false ;; esac; _pipestatus="${PIPESTATUS[*]}"; [[ "${_pipestatus// /}" -eq 0 ]] || die "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})" } unpack_pdv () { local src=$(find_unpackable_file "$1"); local sizeoff_t=$2; [[ -z ${src} ]] && die "Could not locate source for '$1'"; [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :("; local shrtsrc=$(basename "${src}"); echo ">>> Unpacking ${shrtsrc} to ${PWD}"; local metaskip=$(tail -c ${sizeoff_t} "${src}" | hexdump -e \"%i\"); local tailskip=$(tail -c $((${sizeoff_t}*2)) "${src}" | head -c ${sizeoff_t} | hexdump -e \"%i\"); local metafile=$(emktemp); tail -c +$((${metaskip}+1)) "${src}" > "${metafile}"; local datafile=$(tail -c +$((${metaskip}+1)) "${src}" | strings | head -n 1); datafile=$(basename "${datafile}"); local tmpfile=$(emktemp); tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c 512 > ${tmpfile}; local iscompressed=$(file -b "${tmpfile}"); if [[ ${iscompressed:0:8} == "compress" ]]; then iscompressed=1; mv ${tmpfile}{,.Z}; gunzip ${tmpfile}; else iscompressed=0; fi; local istar=$(file -b "${tmpfile}"); if [[ ${istar:0:9} == "POSIX tar" ]]; then istar=1; else istar=0; fi; if [ ${iscompressed} -eq 1 ]; then if [ ${istar} -eq 1 ]; then tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar -xzf -; else tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | gzip -dc > ${datafile}; fi; else if [ ${istar} -eq 1 ]; then tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar --no-same-owner -xf -; else tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) > ${datafile}; fi; fi; true } validate_desktop_entries () { if [[ -x /usr/bin/desktop-file-validate ]]; then einfo "Checking desktop entry validity"; local directories=""; for d in /usr/share/applications $@; do [[ -d ${D}${d} ]] && directories="${directories} ${D}${d}"; done; if [[ -n ${directories} ]]; then for FILE in $(find ${directories} -name "*\.desktop" -not -path '*.hidden*' | sort -u 2>/dev/null); do local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" | sed -e "s|error: ||" -e "s|${FILE}:|--|g" ); [[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:}; done; fi; echo ""; else einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo."; fi } version_compare () { __versionator_shopt_toggle on; local ver_a=${1} ver_b=${2} parts_a parts_b cur_idx_a=0 cur_idx_b=0; parts_a=($(get_all_version_components "${ver_a}" )); parts_b=($(get_all_version_components "${ver_b}" )); local inf_loop=0; while true; do inf_loop=$(( ${inf_loop} + 1 )); [[ ${inf_loop} -gt 20 ]] && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]"; local cur_tok_a=${parts_a[${cur_idx_a}]}; local cur_tok_b=${parts_b[${cur_idx_b}]}; if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then cur_idx_a=$(( ${cur_idx_a} + 1 )); [[ ${parts_a[${cur_idx_a}]} == "." ]] && cur_idx_a=$(( ${cur_idx_a} + 1 )); else cur_tok_a=""; fi; if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then cur_idx_b=$(( ${cur_idx_b} + 1 )); [[ ${parts_b[${cur_idx_b}]} == "." ]] && cur_idx_b=$(( ${cur_idx_b} + 1 )); else cur_tok_b=""; fi; [[ -z ${cur_tok_a} ]] && [[ -z ${cur_tok_b} ]] && break; cur_tok_a=${cur_tok_a##+(0)}; cur_tok_b=${cur_tok_b##+(0)}; [[ -z ${cur_tok_a} ]] && cur_tok_a=0; [[ -z ${cur_tok_b} ]] && cur_tok_b=0; [[ ${cur_tok_a} -lt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 1; [[ ${cur_tok_a} -gt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 3; done; local letter_a=; letter_a=${parts_a[${cur_idx_a}]}; if [[ ${#letter_a} -eq 1 ]] && [[ -z ${letter_a/[a-z]} ]]; then cur_idx_a=$(( ${cur_idx_a} + 1 )); else letter_a="@"; fi; local letter_b=; letter_b=${parts_b[${cur_idx_b}]}; if [[ ${#letter_b} -eq 1 ]] && [[ -z ${letter_b/[a-z]} ]]; then cur_idx_b=$(( ${cur_idx_b} + 1 )); else letter_b="@"; fi; [[ ${letter_a} < ${letter_b} ]] && __versionator_shopt_toggle off && return 1; [[ ${letter_a} > ${letter_b} ]] && __versionator_shopt_toggle off && return 3; local suffix rule part r_lt r_gt; for rule in "alpha=1" "beta=1" "pre=1" "rc=1" "p=3" "r=3"; do suffix=${rule%%=*}; r_lt=${rule##*=}; [[ ${r_lt} -eq 1 ]] && r_gt=3 || r_gt=1; local suffix_a=; for part in ${parts_a[@]}; do [[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_a=${part#${suffix}}0; done; local suffix_b=; for part in ${parts_b[@]}; do [[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_b=${part#${suffix}}0; done; [[ -z ${suffix_a} ]] && [[ -z ${suffix_b} ]] && continue; [[ -z ${suffix_a} ]] && __versionator_shopt_toggle off && return ${r_gt}; [[ -z ${suffix_b} ]] && __versionator_shopt_toggle off && return ${r_lt}; suffix_a=${suffix_a##+(0)}; suffix_a=${suffix_a:-0}; suffix_b=${suffix_b##+(0)}; suffix_b=${suffix_b:-0}; [[ ${suffix_a} -lt ${suffix_b} ]] && __versionator_shopt_toggle off && return 1; [[ ${suffix_a} -gt ${suffix_b} ]] && __versionator_shopt_toggle off && return 3; done; __versionator_shopt_toggle off; return 2 } version_is_at_least () { __versionator_shopt_toggle on; local want_s="$1" have_s="${2:-${PVR}}" r; version_compare "${want_s}" "${have_s}"; r=$?; case $r in 1 | 2) __versionator_shopt_toggle off; return 0 ;; 3) __versionator_shopt_toggle off; return 1 ;; *) __versionator_shopt_toggle off; die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]" ;; esac; __versionator_shopt_toggle off } version_sort () { __versionator_shopt_toggle on; local items= left=0; items=($@); while [[ ${left} -lt ${#items[@]} ]]; do local lowest_idx=${left}; local idx=$(( ${lowest_idx} + 1 )); while [[ ${idx} -lt ${#items[@]} ]]; do version_compare "${items[${lowest_idx}]}" "${items[${idx}]}"; [[ $? -eq 3 ]] && lowest_idx=${idx}; idx=$(( ${idx} + 1 )); done; local tmp=${items[${lowest_idx}]}; items[${lowest_idx}]=${items[${left}]}; items[${left}]=${tmp}; left=$(( ${left} + 1 )); done; echo ${items[@]}; __versionator_shopt_toggle off } want_apache () { debug-print-function $FUNCNAME $*; want_apache2 "$@" } want_apache2 () { debug-print-function $FUNCNAME $*; local myiuse=${1:-apache2}; IUSE="${IUSE} ${myiuse}"; DEPEND="${DEPEND} ${myiuse}? ( ${APACHE2_DEPEND} )"; RDEPEND="${RDEPEND} ${myiuse}? ( ${APACHE2_DEPEND} )"; if use ${myiuse}; then _init_apache2; else _init_no_apache; fi } want_apache2_2 () { debug-print-function $FUNCNAME $*; local myiuse=${1:-apache2}; IUSE="${IUSE} ${myiuse}"; DEPEND="${DEPEND} ${myiuse}? ( ${APACHE2_2_DEPEND} )"; RDEPEND="${RDEPEND} ${myiuse}? ( ${APACHE2_2_DEPEND} )"; if use ${myiuse}; then _init_apache2; else _init_no_apache; fi } declare -x ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1 emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mulaw multi null plug rate route share shm softvol" declare -x APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias proxy" declare -x ARCH="x86" declare -x CBUILD="i686-pc-linux-gnu" declare -x CDEFINE_default="__unix__" declare -x CFLAGS="-O2 -march=pentium4 -fomit-frame-pointer -pipe" declare -x CFLAGS_default="" declare -x CHOST="i686-pc-linux-gnu" declare -x CHOST_default="i686-pc-linux-gnu" declare -x CTARGET_default="i686-pc-linux-gnu" declare -x CVS_RSH="ssh" declare -x CXXFLAGS="-O2 -march=pentium4 -fomit-frame-pointer -pipe" declare -x DEFAULT_ABI="default" declare -x DESTTREE="/usr" declare -x DIROPTIONS="-m0755" declare -x ELIBC="glibc" declare -x ELT_APPLIED_PATCHES=" 1.5.10 1.5.6" declare -x ELT_LTMAIN_SH="/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/work/php-5.2.6RC1/ltmain.sh" declare -x EXEOPTIONS="-m0755" declare -x FEATURES="distlocks metadata-transfer sandbox sfperms strict unmerge-orphans userfetch" declare -x GCC_PATH="/usr/i686-pc-linux-gnu/gcc-bin/4.1.2" declare -x GCC_SPECS="" declare -x G_BROKEN_FILENAMES="1" declare -x G_FILENAME_ENCODING="UTF-8" declare -x INHERITED="apache-module depend.apache toolchain-funcs php5_2-sapi portability flag-o-matic versionator multilib libtool phpconfutils db-use autotools eutils php-common-r1" declare -x INPUT_DEVICES="keyboard mouse evdev" declare -x INSDESTTREE="" declare -x INSOPTIONS="-m0644" declare -x IUSE=" cli cgi discard-path force-cgi-redirect concurrentmodphp threads fastbuild apache2 adabas bcmath berkdb birdstep bzip2 calendar cdb cjk crypt ctype curl curlwrappers db2 dbase dbmaker debug doc empress empress-bcs esoob exif frontbase fdftk filter firebird flatfile ftp gd gd-external gdbm gmp hash iconv imap inifile interbase iodbc ipv6 java-external json kerberos ldap ldap-sasl libedit mcve mhash msql mssql mysql mysqli ncurses nls oci8 oci8-instant-client odbc pcntl pcre pdo pic posix postgres qdbm readline reflection recode sapdb session sharedext sharedmem simplexml snmp soap sockets solid spell spl sqlite ssl suhosin sybase sybase-ct sysvipc tidy tokenizer truetype unicode wddx xml xmlreader xmlwriter xmlrpc xpm xsl yaz zip zip-external zlib" declare -x KERNEL="linux" declare -x KERNEL_ABI="default" declare -x KV="2.6.20-gentoo-r8" declare -x LANG="ru_RU.koi8r" declare -x LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" declare -x LDFLAGS_default="" declare -x LIBDIR_default="lib" declare -x LIBOPTIONS="-m0644" declare -x LINGUAS="ru" declare -x MAIL="/var/mail/root" declare -x MAKEOPTS="-j1" declare -x MULTILIB_ABIS="default" declare -x PHPCONFUTILS_AUTO_USE="gd" declare -x PORTAGE_NICENESS="5" declare -x PYTHONPATH="/usr/lib/portage/pym" declare -x RESTRICT="" declare -x S="/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/work/php-5.2.6RC1" declare -x SANDBOX_DENY="/etc/ld.so.preload" declare -x SANDBOX_PREDICT=":/dev/console:/dev/random:/proc/self/maps:/usr/lib/portage/pym:/usr/lib/python2.0/:/usr/lib/python2.1/:/usr/lib/python2.2/:/usr/lib/python2.3/:/usr/lib/python2.4/:/usr/lib/python2.5/:/usr/lib/python3.0/:/var/cache/edb/dep:/var/db/aliases.db:/var/db/ethers.db:/var/db/group.db:/var/db/hosts.db:/var/db/netgroup.db:/var/db/netmasks.db:/var/db/networks.db:/var/db/passwd.db:/var/db/protocols.db:/var/db/rpc.db:/var/db/services.db:/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/homedir/.:" declare -x SANDBOX_READ=":/:/dev/shm:/dev/stdin:/var/tmp:" declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/shm/ngpt:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp:/tmp/:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/lib/cf:/usr/lib/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/log/scrollkeeper.log:/var/tmp:/var/tmp/:/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/homedir/.bash_history:/var/tmp/portage/dev-lang/php-5.2.6_rc1-r1/homedir/.gconfd/lock:" declare -x SLOT="5" declare -x SSH_CLIENT="192.168.0.14 35534 65022" declare -x SSH_CONNECTION="192.168.0.14 35534 192.168.0.2 65022" declare -x SSH_TTY="/dev/pts/7" declare -x STAGE1_USE="nptl nptlonly unicode" declare -x USE="apache2 berkdb cli crypt elibc_glibc gdbm iconv kernel_linux mysql mysqli ncurses nls pcre readline reflection session snmp sockets spl ssl truetype unicode userland_GNU x86 xml zlib" declare -x USERLAND="GNU" declare -x VIDEO_CARDS="apm ark chips cirrus cyrix dummy fbdev glint i128 i740 i810 imstt mach64 mga neomagic nsc nv r128 radeon rendition s3 s3virge savage siliconmotion sis sisusb tdfx tga trident tseng v4l vesa vga via vmware voodoo" declare -x WANT_AUTOCONF="2.5" declare -x WANT_AUTOMAKE="1.10" declare -x _E_DOCDESTTREE_="" declare -x _E_EXEDESTTREE_=""