Ticket #259: environment

File environment, 225.4 KB (added by Deadman44, 3 years ago)
Line 
1ALSA_CARDS=
2ALSA_PCM_PLUGINS='adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol'
3APACHE2_2_DEPEND='=www-servers/apache-2.2*'
4APACHE2_DEPEND='=www-servers/apache-2*'
5APACHE2_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'
6APACHE_DEPEND=www-servers/apache
7APACHE_VERSION=0
8ARCH=arm
9ARCH_LIB=
10AT_GNUCONF_UPDATE=no
11AT_M4DIR=
12BYTECOMPFLAGS='-L .'
13CBUILD=armv4tl-softfloat-linux-gnueabi
14CDEFINE_default=__unix__
15CDEPEND=$'>=dev-db/sqlite-3.4[threadsafe]\n\t>=dev-libs/apr-1.3:1\n\t>=dev-libs/apr-util-1.3:1\n\tdev-libs/expat\n\tsys-libs/zlib\n\tberkdb? ( =sys-libs/db-4* )\n\temacs? ( virtual/emacs )\n\tgnome-keyring? ( dev-libs/glib:2 sys-apps/dbus gnome-base/gnome-keyring )\n\truby? ( >=dev-lang/ruby-1.8.2 )\n\tsasl? ( dev-libs/cyrus-sasl )\n\twebdav-neon? ( >=net-misc/neon-0.28 )\n\twebdav-serf? ( >=net-libs/serf-0.3.0 )'
16CFLAGS='-Os -march=armv4t -pipe -fno-strict-aliasing'
17CFLAGS_default=
18CHOST=armv4tl-softfloat-linux-gnueabi
19CHOST_default=armv4tl-softfloat-linux-gnueabi
20CROSSCOMPILE_OPTS=
21CTARGET_default=armv4tl-softfloat-linux-gnueabi
22CVS_RSH=ssh
23CXXFLAGS='-Os -march=armv4t -pipe -fno-strict-aliasing'
24DEFAULT_ABI=default
25DEFINED_PHASES=' compile config configure install postinst postrm preinst prepare setup test unpack'
26DEPEND=$'>=dev-db/sqlite-3.4[threadsafe]\n\t>=dev-libs/apr-1.3:1\n\t>=dev-libs/apr-util-1.3:1\n\tdev-libs/expat\n\tsys-libs/zlib\n\tberkdb? ( =sys-libs/db-4* )\n\temacs? ( virtual/emacs )\n\tgnome-keyring? ( dev-libs/glib:2 sys-apps/dbus gnome-base/gnome-keyring )\n\truby? ( >=dev-lang/ruby-1.8.2 )\n\tsasl? ( dev-libs/cyrus-sasl )\n\twebdav-neon? ( >=net-misc/neon-0.28 )\n\twebdav-serf? ( >=net-libs/serf-0.3.0 )\n\tctypes-python? ( dev-python/ctypesgen )\n\tdoc? ( app-doc/doxygen )\n\tgnome-keyring? ( dev-util/pkgconfig )\n\tjava? ( >=virtual/jdk-1.5 )\n\tnls? ( sys-devel/gettext )\n\twebdav-neon? ( dev-util/pkgconfig ) apache2? ( =www-servers/apache-2* )  \n\t>=sys-devel/autoconf-2.61 sys-devel/libtool java? ( >=dev-java/java-config-2.1.6  ) dev-lang/perl[-build]'
27DESCRIPTION='Advanced version control system'
28DESTTREE=/usr
29DIROPTIONS=-m0755
30EAPI=2
31EBUILD_DEATH_HOOKS=' java-pkg_die'
32ECONF_SOURCE=.
33ELIBC=glibc
34ELIBTOOL_VERSION=2.0.2
35ELT_APPLIED_PATCHES=' 1.5.10 1.5.6 1.5.26'
36ELT_LTMAIN_SH=/var/tmp/portage/dev-util/subversion-1.6.2/work/subversion-1.6.2/build/ltmain.sh
37ELT_PATCH_DIR=/usr/portage/eclass/ELT-patches
38EMACS=/usr/bin/emacs
39EMACSFLAGS='-batch -q --no-site-file'
40EPATCH_EXCLUDE=
41EPATCH_FORCE=no
42EPATCH_MULTI_MSG='Applying various patches (bugfixes/updates) ...'
43EPATCH_OPTS='-g0 -E --no-backup-if-mismatch'
44EPATCH_SINGLE_MSG=
45EPATCH_SOURCE=/var/tmp/portage/dev-util/subversion-1.6.2/work/patch
46EPATCH_SUFFIX=patch.bz2
47EXEOPTIONS=-m0755
48FCFLAGS=' -fno-strict-aliasing'
49FEATURES='distlocks fixpackages parallel-fetch protect-owned sandbox sfperms strict unmerge-orphans userfetch'
50FFLAGS=' -fno-strict-aliasing'
51GCC_SPECS=
52HISTFILESIZE=1000
53HISTSIZE=1000
54HOMEPAGE=http://subversion.tigris.org/
55INHERITED='autotools multilib elisp-common portability flag-o-matic python java-utils-2 versionator alternatives bash-completion java-pkg-opt-2 base libtool toolchain-funcs db-use depend.apache eutils perl-module'
56INPUT_DEVICES=
57INSDESTTREE=
58INSOPTIONS=-m0644
59IUSE='apache2 berkdb ctypes-python debug doc +dso emacs extras gnome-keyring java nls perl python ruby sasl test vim-syntax +webdav-neon webdav-serf apache2  bash-completion elibc_FreeBSD  java'
60JAVA_PKG_ALLOW_VM_CHANGE=yes
61JAVA_PKG_BUILD_DEPEND_FILE=/var/tmp/portage/dev-util/subversion-1.6.2/temp/java-pkg-build-depend
62JAVA_PKG_COMPILERS_CONF=/etc/java-config-2/build/compilers.conf
63JAVA_PKG_COMPILER_DIR=/usr/share/java-config-2/compiler
64JAVA_PKG_DEPEND_FILE=/var/tmp/portage/dev-util/subversion-1.6.2/temp/java-pkg-depend
65JAVA_PKG_EXTRA_ENV=/var/tmp/portage/dev-util/subversion-1.6.2/temp/java-pkg-extra-env
66JAVA_PKG_EXTRA_ENV_VARS=
67JAVA_PKG_E_DEPEND='>=dev-java/java-config-2.1.6 '
68JAVA_PKG_OPTIONAL_DEPEND_FILE=/var/tmp/portage/dev-util/subversion-1.6.2/temp/java-pkg-optional-depend
69JAVA_PKG_OPT_USE=java
70JAVA_PKG_QA_VIOLATIONS=0
71KERNEL=linux
72KERNEL_ABI=default
73KEYWORDS='alpha amd64 arm hppa ia64 ~ppc ~ppc64 s390 sh sparc x86'
74KV=
75LCD_DEVICES=
76LDFLAGS=-Wl,-O1
77LDFLAGS_default=
78LIBDIR_default=lib
79LIBOPTIONS=-m0644
80LICENSE=Subversion
81MODULE_A=subversion-1.6.2.tar.gz
82MULTILIB_ABIS=default
83NETBEANS='apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml'
84PDEPEND=' '
85PERL_VERSION=
86PORTAGE_COMPRESS_EXCLUDE_SUFFIXES='css gif htm[l]? jp[e]?g js pdf png'
87PREFER_BUILDPL=yes
88PROFILE_ONLY_VARIABLES='ARCH ELIBC KERNEL USERLAND'
89PROPERTIES=
90PROVIDE=
91PYTHONDONTWRITEBYTECODE=1
92PYTHON_ATOM=dev-lang/python
93PYTHON_DONTCOMPILE=1
94RDEPEND=$'>=dev-db/sqlite-3.4[threadsafe]\n\t>=dev-libs/apr-1.3:1\n\t>=dev-libs/apr-util-1.3:1\n\tdev-libs/expat\n\tsys-libs/zlib\n\tberkdb? ( =sys-libs/db-4* )\n\temacs? ( virtual/emacs )\n\tgnome-keyring? ( dev-libs/glib:2 sys-apps/dbus gnome-base/gnome-keyring )\n\truby? ( >=dev-lang/ruby-1.8.2 )\n\tsasl? ( dev-libs/cyrus-sasl )\n\twebdav-neon? ( >=net-misc/neon-0.28 )\n\twebdav-serf? ( >=net-libs/serf-0.3.0 )\n\tapache2? ( www-servers/apache[apache2_modules_dav] )\n\tjava? ( >=virtual/jre-1.5 )\n\tnls? ( virtual/libintl )\n\tperl? ( dev-perl/URI ) apache2? ( =www-servers/apache-2* )   bash-completion? (\tapp-admin/eselect ) java? ( >=dev-java/java-config-2.1.6  ) dev-lang/perl[-build]'
95RESTRICT=
96S=/var/tmp/portage/dev-util/subversion-1.6.2/work/subversion-1.6.2
97SANDBOX_DEBUG=0
98SANDBOX_DENY=/etc/ld.so.preload
99SANDBOX_PID=17346
100SANDBOX_PREDICT=/dev/console:/dev/crypto:/dev/random:/proc/self/maps:/var/tmp/portage/dev-util/subversion-1.6.2/homedir
101SANDBOX_READ=/:/dev/shm:/dev/stdin:/var/tmp
102SANDBOX_VERBOSE=1
103SANDBOX_WRITE=:/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/dev-util/subversion-1.6.2/homedir/.bash_history
104SITEETC=/usr/share/emacs/etc
105SITELISP=/usr/share/emacs/site-lisp
106SITE_ARCH=
107SITE_LIB=
108SLOT=0
109SRC_PREP=no
110SRC_TEST=skip
111SRC_URI=http://subversion.tigris.org/downloads/subversion-1.6.2.tar.bz2
112SVN_BDB_VERSION=4.6
113SVN_REPOS_LOC=/var/svn
114TSLIB_TSDEVICE=/dev/input/touchscreen0
115USE='arm berkdb dso elibc_glibc kernel_linux nls perl python userland_GNU webdav-neon'
116USERLAND=GNU
117VENDOR_ARCH=
118VENDOR_LIB=
119VIDEO_CARDS=
120WANT_AUTOCONF=2.5
121WANT_AUTOMAKE=none
122WANT_JAVA_CONFIG=2
123_=PKG_INSTALL_MASK
124_E_DOCDESTTREE_=
125_E_EXEDESTTREE_=
126___ECLASS_RECUR_MULTILIB=yes
127___ECLASS_RECUR_TOOLCHAIN_FUNCS=yes
128_pipestatus='0 0'
129conf=subversion-1.6.2-r0
130perlinfo_done=false
131pm_echovar=
132str='_init_no_apache: entering function'
133ELT_find_ltmain_sh ()
134{
135    local x=;
136    local dirlist=;
137    for x in $(find "${S}" -name 'ltmain.sh');
138    do
139        dirlist="${dirlist} ${x%/*}";
140    done;
141    echo "${dirlist}"
142}
143ELT_libtool_version ()
144{
145    local ltmain_sh=$1;
146    local version=;
147    version=$(eval $(grep -e '^[[:space:]]*VERSION=' "${ltmain_sh}");                    echo "${VERSION}");
148    [[ -z ${version} ]] && version="0";
149    echo "${version}"
150}
151ELT_try_and_apply_patch ()
152{
153    local ret=0;
154    local file=$1;
155    local patch=$2;
156    if patch -p0 --dry-run "${file}" "${patch}" >&"${T}/elibtool.log"; then
157        einfo "  Applying $(basename "$(dirname "${patch}")")-${patch##*/}.patch ...";
158        patch -p0 -g0 --no-backup-if-mismatch "${file}" "${patch}" >&"${T}/elibtool.log";
159        ret=$?;
160        export ELT_APPLIED_PATCHES="${ELT_APPLIED_PATCHES} ${patch##*/}";
161    else
162        ret=1;
163    fi;
164    return "${ret}"
165}
166ELT_walk_patches ()
167{
168    local x=;
169    local y=;
170    local ret=1;
171    local file=$1;
172    local patch_set=$2;
173    local patch_dir=;
174    local rem_int_dep=$3;
175    if [[ -n ${patch_set} ]]; then
176        if [[ -d ${ELT_PATCH_DIR}/${patch_set} ]]; then
177            patch_dir="${ELT_PATCH_DIR}/${patch_set}";
178        else
179            return "${ret}";
180        fi;
181        for x in $(ls -d "${patch_dir}"/* 2> /dev/null | grep -v 'CVS' | sort -r);
182        do
183            if [[ -n ${x} && -f ${x} ]]; then
184                if [[ -n ${rem_int_dep} ]]; then
185                    sed -e "s|@REM_INT_DEP@|${rem_int_dep}|g" ${x} > "${T}/$$.rem_int_deps.patch";
186                    x="${T}/$$.rem_int_deps.patch";
187                fi;
188                if ELT_try_and_apply_patch "${file}" "${x}"; then
189                    ret=0;
190                    break;
191                fi;
192            fi;
193        done;
194    fi;
195    return "${ret}"
196}
197VER_major ()
198{
199    [[ -z $1 ]] && return 1;
200    local VER=$@;
201    echo "${VER%%[^[:digit:]]*}"
202}
203VER_micro ()
204{
205    [[ -z $1 ]] && return 1;
206    local VER=$@;
207    VER=${VER#*.*.};
208    echo "${VER%%[^[:digit:]]*}"
209}
210VER_minor ()
211{
212    [[ -z $1 ]] && return 1;
213    local VER=$@;
214    VER=${VER#*.};
215    echo "${VER%%[^[:digit:]]*}"
216}
217VER_to_int ()
218{
219    [[ -z $1 ]] && return 1;
220    local VER_MAJOR=$(VER_major "$1");
221    local VER_MINOR=$(VER_minor "$1");
222    local VER_MICRO=$(VER_micro "$1");
223    local VER_int=$(( VER_MAJOR * 65536 + VER_MINOR * 256 + VER_MICRO ));
224    if [[ ${VER_int} -ge 65536 ]]; then
225        echo "${VER_int}";
226        return 0;
227    fi;
228    echo 1;
229    return 1
230}
231__python_eclass_test ()
232{
233    __python_version_extract 2.3;
234    echo -n "2.3 -> PYVER: $PYVER PYVER_MAJOR: $PYVER_MAJOR";
235    echo " PYVER_MINOR: $PYVER_MINOR PYVER_MICRO: $PYVER_MICRO";
236    __python_version_extract 2.3.4;
237    echo -n "2.3.4 -> PYVER: $PYVER PYVER_MAJOR: $PYVER_MAJOR";
238    echo " PYVER_MINOR: $PYVER_MINOR PYVER_MICRO: $PYVER_MICRO";
239    __python_version_extract 2.3.5;
240    echo -n "2.3.5 -> PYVER: $PYVER PYVER_MAJOR: $PYVER_MAJOR";
241    echo " PYVER_MINOR: $PYVER_MINOR PYVER_MICRO: $PYVER_MICRO";
242    __python_version_extract 2.4;
243    echo -n "2.4 -> PYVER: $PYVER PYVER_MAJOR: $PYVER_MAJOR";
244    echo " PYVER_MINOR: $PYVER_MINOR PYVER_MICRO: $PYVER_MICRO";
245    __python_version_extract 2.5b3;
246    echo -n "2.5b3 -> PYVER: $PYVER PYVER_MAJOR: $PYVER_MAJOR";
247    echo " PYVER_MINOR: $PYVER_MINOR PYVER_MICRO: $PYVER_MICRO"
248}
249__python_version_extract ()
250{
251    local verstr=$1;
252    export PYVER_MAJOR=${verstr:0:1};
253    export PYVER_MINOR=${verstr:2:1};
254    if [[ ${verstr:3:1} == . ]]; then
255        export PYVER_MICRO=${verstr:4};
256    fi;
257    export PYVER="${PYVER_MAJOR}.${PYVER_MINOR}"
258}
259__versionator__test_version_compare ()
260{
261    __versionator_shopt_toggle on;
262    local lt=1 eq=2 gt=3 p q;
263    function __versionator__test_version_compare_t ()
264    {
265        version_compare "${1}" "${3}";
266        local r=$?;
267        [[ ${r} -eq ${2} ]] || echo "FAIL: ${@} (got ${r} exp ${2})"
268    };
269    echo "
270                0             $lt 1
271                1             $lt 2
272                2             $gt 1
273                2             $eq 2
274                0             $eq 0
275                10            $lt 20
276                68            $eq 068
277                068           $gt 67
278                068           $lt 69
279
280                1.0           $lt 2.0
281                2.0           $eq 2.0
282                2.0           $gt 1.0
283
284                1.0           $gt 0.0
285                0.0           $eq 0.0
286                0.0           $lt 1.0
287
288                0.1           $lt 0.2
289                0.2           $eq 0.2
290                0.3           $gt 0.2
291
292                1.2           $lt 2.1
293                2.1           $gt 1.2
294
295                1.2.3         $lt 1.2.4
296                1.2.4         $gt 1.2.3
297
298                1.2.0         $eq 1.2
299                1.2.1         $gt 1.2
300                1.2           $lt 1.2.1
301
302                1.2b          $eq 1.2b
303                1.2b          $lt 1.2c
304                1.2b          $gt 1.2a
305                1.2b          $gt 1.2
306                1.2           $lt 1.2a
307
308                1.3           $gt 1.2a
309                1.3           $lt 1.3a
310
311                1.0_alpha7    $lt 1.0_beta7
312                1.0_beta      $lt 1.0_pre
313                1.0_pre5      $lt 1.0_rc2
314                1.0_rc2       $lt 1.0
315
316                1.0_p1        $gt 1.0
317                1.0_p1-r1     $gt 1.0_p1
318
319                1.0_alpha6-r1 $gt 1.0_alpha6
320                1.0_beta6-r1  $gt 1.0_alpha6-r2
321
322                1.0_pre1      $lt 1.0-p1
323
324                1.0p          $gt 1.0_p1
325                1.0r          $gt 1.0-r1
326                1.6.15        $gt 1.6.10-r2
327                1.6.10-r2     $lt 1.6.15
328
329        " | while read a b c; do
330        [[ -z "${a}${b}${c}" ]] && continue;
331        __versionator__test_version_compare_t "${a}" "${b}" "${c}";
332    done;
333    for q in "alpha beta pre rc=${lt};${gt}" "p r=${gt};${lt}";
334    do
335        for p in ${q%%=*};
336        do
337            local c=${q##*=};
338            local alt=${c%%;*} agt=${c##*;};
339            __versionator__test_version_compare_t "1.0" $agt "1.0_${p}";
340            __versionator__test_version_compare_t "1.0" $agt "1.0_${p}1";
341            __versionator__test_version_compare_t "1.0" $agt "1.0_${p}068";
342            __versionator__test_version_compare_t "2.0_${p}" $alt "2.0";
343            __versionator__test_version_compare_t "2.0_${p}1" $alt "2.0";
344            __versionator__test_version_compare_t "2.0_${p}068" $alt "2.0";
345            __versionator__test_version_compare_t "1.0_${p}" $eq "1.0_${p}";
346            __versionator__test_version_compare_t "0.0_${p}" $lt "0.0_${p}1";
347            __versionator__test_version_compare_t "666_${p}3" $gt "666_${p}";
348            __versionator__test_version_compare_t "1_${p}7" $lt "1_${p}8";
349            __versionator__test_version_compare_t "1_${p}7" $eq "1_${p}7";
350            __versionator__test_version_compare_t "1_${p}7" $gt "1_${p}6";
351            __versionator__test_version_compare_t "1_${p}09" $eq "1_${p}9";
352        done;
353    done;
354    for p in "-r" "_p";
355    do
356        __versionator__test_version_compare_t "7.2${p}1" $lt "7.2${p}2";
357        __versionator__test_version_compare_t "7.2${p}2" $gt "7.2${p}1";
358        __versionator__test_version_compare_t "7.2${p}3" $gt "7.2${p}2";
359        __versionator__test_version_compare_t "7.2${p}2" $lt "7.2${p}3";
360    done;
361    __versionator_shopt_toggle off
362}
363__versionator_shopt_toggle ()
364{
365    VERSIONATOR_RECURSION=${VERSIONATOR_RECURSION:-0};
366    case "$1" in
367        "on")
368            if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then
369                VERSIONATOR_OLD_EXTGLOB=$(shopt -p extglob);
370                shopt -s extglob;
371            fi;
372            VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION + 1 ))
373        ;;
374        "off")
375            VERSIONATOR_RECURSION=$(( $VERSIONATOR_RECURSION - 1 ));
376            if [[ $VERSIONATOR_RECURSION -lt 1 ]]; then
377                eval $VERSIONATOR_OLD_EXTGLOB;
378            fi
379        ;;
380    esac;
381    return 0
382}
383_cdrom_locate_file_on_cd ()
384{
385    local mline="";
386    local showedmsg=0 showjolietmsg=0;
387    while [[ -z ${CDROM_ROOT} ]]; do
388        local i=0;
389        local -a cdset=(${*//:/ });
390        if [[ -n ${CDROM_SET} ]]; then
391            cdset=(${cdset[${CDROM_SET}]});
392        fi;
393        while [[ -n ${cdset[${i}]} ]]; do
394            local dir=$(dirname ${cdset[${i}]});
395            local file=$(basename ${cdset[${i}]});
396            local point= node= fs= foo=;
397            while read point node fs foo; do
398                [[ " cd9660 iso9660 udf " != *" ${fs} "* ]] && ! [[ ${fs} == "subfs" && ",${opts}," == *",fs=cdfss,"* ]] && continue;
399                point=${point//\040/ };
400                [[ ! -d ${point}/${dir} ]] && continue;
401                [[ -z $(find "${point}/${dir}" -maxdepth 1 -iname "${file}") ]] && continue;
402                export CDROM_ROOT=${point};
403                export CDROM_SET=${i};
404                export CDROM_MATCH=${cdset[${i}]};
405                return;
406            done <<< "$(get_mounts)";
407            ((++i));
408        done;
409        echo;
410        if [[ ${showedmsg} -eq 0 ]]; then
411            if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
412                if [[ -z ${CDROM_NAME} ]]; then
413                    einfo "Please insert+mount the cdrom for ${PN} now !";
414                else
415                    einfo "Please insert+mount the ${CDROM_NAME} cdrom now !";
416                fi;
417            else
418                if [[ -z ${CDROM_NAME_1} ]]; then
419                    einfo "Please insert+mount cd #${CDROM_CURRENT_CD} for ${PN} now !";
420                else
421                    local var="CDROM_NAME_${CDROM_CURRENT_CD}";
422                    einfo "Please insert+mount the ${!var} cdrom now !";
423                fi;
424            fi;
425            showedmsg=1;
426        fi;
427        einfo "Press return to scan for the cd again";
428        einfo "or hit CTRL+C to abort the emerge.";
429        echo;
430        if [[ ${showjolietmsg} -eq 0 ]]; then
431            showjolietmsg=1;
432        else
433            ewarn "If you are having trouble with the detection";
434            ewarn "of your CD, it is possible that you do not have";
435            ewarn "Joliet support enabled in your kernel.  Please";
436            ewarn "check that CONFIG_JOLIET is enabled in your kernel.";
437            ebeep 5;
438        fi;
439        read || die "something is screwed with your system";
440    done
441}
442_elibtoolize ()
443{
444    local opts g=;
445    [[ -n $(autotools_check_macro AC_PROG_LIBTOOL AM_PROG_LIBTOOL LT_INIT) ]] || return 0;
446    [[ -f GNUmakefile.am || -f Makefile.am ]] && opts="--automake";
447    [[ ${CHOST} == *-darwin* ]] && g=g;
448    autotools_run_tool ${LIBTOOLIZE:-${g}libtoolize} "$@" ${opts};
449    eaclocal
450}
451_epatch_assert ()
452{
453    local _pipestatus=${PIPESTATUS[*]};
454    [[ ${_pipestatus// /} -eq 0 ]]
455}
456_epatch_draw_line ()
457{
458    [[ -z $1 ]] && set "$(printf "%65s" '')";
459    echo "${1//?/=}"
460}
461_filter-hardened ()
462{
463    local f;
464    for f in "$@";
465    do
466        case "${f}" in
467            -fPIC | -fpic | -fPIE | -fpie | -Wl,pie | -pie)
468                gcc-specs-pie || continue;
469                is-flagq -nopie || append-flags -nopie
470            ;;
471            -fstack-protector)
472                gcc-specs-ssp || continue;
473                is-flagq -fno-stack-protector || append-flags $(test-flags -fno-stack-protector)
474            ;;
475            -fstack-protector-all)
476                gcc-specs-ssp-to-all || continue;
477                is-flagq -fno-stack-protector-all || append-flags $(test-flags -fno-stack-protector-all)
478            ;;
479            -fno-strict-overflow)
480                gcc-specs-nostrict || continue;
481                is-flagq -fstrict-overflow || append-flags $(test-flags -fstrict-overflow)
482            ;;
483        esac;
484    done
485}
486_filter-var ()
487{
488    local f x VAR VAL;
489    declare -a new;
490    VAR=$1;
491    shift;
492    eval VAL=\${${VAR}};
493    for f in ${VAL};
494    do
495        for x in "$@";
496        do
497            [[ ${f} == ${x} ]] && continue 2;
498        done;
499        eval new\[\${\#new\[@]}]=\${f};
500    done;
501    eval export ${VAR}=\${new\[*]}
502}
503_gcc-install-dir ()
504{
505    echo "$(LC_ALL=C $(tc-getCC) -print-search-dirs 2> /dev/null |              awk '$1=="install:" {print $2}')"
506}
507_gcc-specs-directive_raw ()
508{
509    local cc=$(tc-getCC);
510    local specfiles=$(LC_ALL=C ${cc} -v 2>&1 | awk '$1=="Reading" {print $NF}');
511    ${cc} -dumpspecs 2> /dev/null | cat - ${specfiles} | awk -v directive=$1 'BEGIN     { pspec=""; spec=""; outside=1 }
512$1=="*"directive":"  { pspec=spec; spec=""; outside=0; next }
513        outside || NF==0 || ( substr($1,1,1)=="*" && substr($1,length($1),1)==":" ) { outside=1; next }
514        spec=="" && substr($0,1,1)=="+" { spec=pspec " " substr($0,2); next }
515        { spec=spec $0 }
516END     { print spec }';
517    return 0
518}
519_gcc-specs-exists ()
520{
521    [[ -f $(_gcc-install-dir)/$1 ]]
522}
523_init_apache2 ()
524{
525    debug-print-function $FUNCNAME $*;
526    APACHE_VERSION="2";
527    APXS="/usr/sbin/apxs2";
528    APACHE_BIN="/usr/sbin/apache2";
529    APACHE_CTL="/usr/sbin/apache2ctl";
530    APACHE_INCLUDEDIR="/usr/include/apache2";
531    APACHE_BASEDIR="/usr/$(get_libdir)/apache2";
532    APACHE_CONFDIR="/etc/apache2";
533    APACHE_MODULES_CONFDIR="${APACHE_CONFDIR}/modules.d";
534    APACHE_VHOSTS_CONFDIR="${APACHE_CONFDIR}/vhosts.d";
535    APACHE_MODULESDIR="${APACHE_BASEDIR}/modules"
536}
537_init_no_apache ()
538{
539    debug-print-function $FUNCNAME $*;
540    APACHE_VERSION="0"
541}
542_is_flagq ()
543{
544    local x;
545    for x in ${!1};
546    do
547        [[ ${x} == $2 ]] && return 0;
548    done;
549    return 1
550}
551_unpack_tar ()
552{
553    if [ "${y}" == "tar" ]; then
554        $1 -dc "$srcdir$x" | tar xof -;
555        _pipestatus="${PIPESTATUS[*]}";
556        [[ "${_pipestatus// /}" -eq 0 ]] || die "$myfail";
557    else
558        $1 -dc "${srcdir}${x}" > ${x%.*} || die "$myfail";
559    fi
560}
561alternatives_auto_makesym ()
562{
563    local SYMLINK REGEX ALT myregex;
564    SYMLINK=$1;
565    REGEX=$2;
566    if [ "${REGEX:0:1}" != "/" ]; then
567        myregex="${SYMLINK%/*}/${REGEX}";
568    else
569        myregex=${REGEX};
570    fi;
571    ALT="$(for i in $(echo ${ROOT}${myregex}); do echo ${i#${ROOT}}; done | sort -r)";
572    alternatives_makesym ${SYMLINK} ${ALT}
573}
574alternatives_makesym ()
575{
576    local ALTERNATIVES="";
577    local SYMLINK="";
578    local alt pref;
579    SYMLINK=$1;
580    pref=$(echo ${ROOT} | sed 's:/$::');
581    shift;
582    ALTERNATIVES=$@;
583    for alt in ${ALTERNATIVES};
584    do
585        if [ -f "${pref}${alt}" ]; then
586            if [ "${alt%/*}" = "${SYMLINK%/*}" ]; then
587                einfo "Linking ${alt} to ${pref}${SYMLINK} (relative)";
588                ln -sf ${alt##*/} ${pref}${SYMLINK};
589            else
590                einfo "Linking ${alt} to ${pref}${SYMLINK} (absolute)";
591                ln -sf ${pref}${alt} ${pref}${SYMLINK};
592            fi;
593            break;
594        fi;
595    done;
596    if [ ! -L ${pref}${SYMLINK} ]; then
597        ewarn "Unable to establish ${pref}${SYMLINK} symlink";
598    else
599        if [ ! -f "`dirname ${pref}${SYMLINK}`/`readlink ${pref}${SYMLINK}`" -a ! -f "`readlink ${pref}${SYMLINK}`" ]; then
600            ewarn "Removing dead symlink ${pref}${SYMLINK}";
601            rm -f ${pref}${SYMLINK};
602        fi;
603    fi
604}
605alternatives_pkg_postinst ()
606{
607    if [ -n "${ALTERNATIVES}" -a -n "${SOURCE}" ]; then
608        alternatives_makesym ${SOURCE} ${ALTERNATIVES};
609    fi
610}
611alternatives_pkg_postrm ()
612{
613    if [ -n "${ALTERNATIVES}" -a -n "${SOURCE}" ]; then
614        alternatives_makesym ${SOURCE} ${ALTERNATIVES};
615    fi
616}
617append-cflags ()
618{
619    [[ -z $* ]] && return 0;
620    export CFLAGS="${CFLAGS} $*";
621    return 0
622}
623append-cppflags ()
624{
625    [[ -z $* ]] && return 0;
626    export CPPFLAGS="${CPPFLAGS} $*";
627    return 0
628}
629append-cxxflags ()
630{
631    [[ -z $* ]] && return 0;
632    export CXXFLAGS="${CXXFLAGS} $*";
633    return 0
634}
635append-fflags ()
636{
637    [[ -z $* ]] && return 0;
638    export FFLAGS="${FFLAGS} $*";
639    export FCFLAGS="${FCFLAGS} $*";
640    return 0
641}
642append-flags ()
643{
644    [[ -z $* ]] && return 0;
645    append-cflags "$@";
646    append-cxxflags "$@";
647    append-fflags "$@";
648    return 0
649}
650append-ldflags ()
651{
652    [[ -z $* ]] && return 0;
653    local flag;
654    for flag in "$@";
655    do
656        [[ ${flag} == -l* ]] && ewarn "Appending a library link instruction (${flag}); libraries to link to should not be passed through LDFLAGS";
657    done;
658    export LDFLAGS="${LDFLAGS} $*";
659    return 0
660}
661append-lfs-flags ()
662{
663    [[ -n $@ ]] && die "append-lfs-flags takes no arguments";
664    append-cppflags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
665}
666autotools_check_macro ()
667{
668    [[ -f configure.ac || -f configure.in ]] || return 0;
669    local macro;
670    for macro in "$@";
671    do
672        WANT_AUTOCONF="2.5" autoconf --trace="${macro}" 2> /dev/null;
673    done;
674    return 0
675}
676autotools_get_auxdir ()
677{
678    local auxdir_scan_out;
679    auxdir_scan_out=$(autotools_check_macro "AC_CONFIG_AUX_DIR");
680    [[ -n ${auxdir_scan_out} ]] || return 0;
681    echo ${auxdir_scan_out} | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) {
682                if (match($0, /AC_CONFIG_AUX_DIR:(.*)$/, res))
683                        print res[1]
684        }' | uniq;
685    return 0
686}
687autotools_get_subdirs ()
688{
689    local subdirs_scan_out;
690    subdirs_scan_out=$(autotools_check_macro "AC_CONFIG_SUBDIRS");
691    [[ -n ${subdirs_scan_out} ]] || return 0;
692    echo "${subdirs_scan_out}" | gawk '($0 !~ /^[[:space:]]*(#|dnl)/) {
693                if (match($0, /AC_CONFIG_SUBDIRS:(.*)$/, res))
694                        print res[1]
695        }' | uniq;
696    return 0
697}
698autotools_run_tool ()
699{
700    if [[ ${EBUILD_PHASE} != "unpack" && ${EBUILD_PHASE} != "prepare" ]]; then
701        ewarn "QA Warning: running $1 in ${EBUILD_PHASE} phase";
702    fi;
703    [[ ${WANT_AUTOMAKE} == "latest" ]] && export WANT_AUTOMAKE=1.10;
704    [[ ${WANT_AUTOCONF} == "latest" ]] && export WANT_AUTOCONF=2.5;
705    local STDERR_TARGET="${T}/$1.out";
706    if [[ -e ${STDERR_TARGET} ]]; then
707        STDERR_TARGET="${T}/$1-$$.out";
708    fi;
709    printf "***** $1 *****\n***** PWD: ${PWD}\n***** $*\n\n" > "${STDERR_TARGET}";
710    ebegin "Running $@";
711    "$@" >> "${STDERR_TARGET}" 2>&1;
712    eend $?;
713    if [[ $? != 0 && ${NO_FAIL} != 1 ]]; then
714        echo;
715        eerror "Failed Running $1 !";
716        eerror;
717        eerror "Include in your bugreport the contents of:";
718        eerror;
719        eerror "  ${STDERR_TARGET}";
720        echo;
721        die "Failed Running $1 !";
722    fi
723}
724base_src_compile ()
725{
726    debug-print-function $FUNCNAME "$@";
727    if [ -z "$1" ]; then
728        case "${EAPI:-0}" in
729            2)
730                base_src_work make
731            ;;
732            *)
733                base_src_work all
734            ;;
735        esac;
736    else
737        base_src_work $@;
738    fi
739}
740base_src_configure ()
741{
742    debug-print-function $FUNCNAME "$@";
743    base_src_work configure
744}
745base_src_install ()
746{
747    debug-print-function $FUNCNAME "$@";
748    [ -z "$1" ] && base_src_install all;
749    cd "${S}";
750    while [ "$1" ]; do
751        case $1 in
752            make)
753                debug-print-section make;
754                make DESTDIR="${D}" install || die "died running make install, $FUNCNAME:make"
755            ;;
756            all)
757                debug-print-section all;
758                base_src_install make
759            ;;
760        esac;
761        shift;
762    done
763}
764base_src_prepare ()
765{
766    debug-print-function $FUNCNAME "$@";
767    base_src_util autopatch
768}
769base_src_unpack ()
770{
771    debug-print-function $FUNCNAME "$@";
772    if [ -z "$1" ]; then
773        case "${EAPI:-0}" in
774            2)
775                base_src_util unpack
776            ;;
777            *)
778                base_src_util all
779            ;;
780        esac;
781    else
782        base_src_util $@;
783    fi
784}
785base_src_util ()
786{
787    local x;
788    debug-print-function $FUNCNAME "$@";
789    cd "${WORKDIR}";
790    while [ "$1" ]; do
791        case $1 in
792            unpack)
793                debug-print-section unpack;
794                if [ ! -z "$A" ]; then
795                    unpack ${A};
796                fi
797            ;;
798            patch)
799                debug-print-section patch;
800                cd "${S}";
801                epatch "${FILESDIR}/${P}-gentoo.diff"
802            ;;
803            autopatch)
804                debug-print-section autopatch;
805                debug-print "$FUNCNAME: autopatch: PATCHES=$PATCHES, PATCHES1=$PATCHES1";
806                cd "${S}";
807                if [[ ${#PATCHES[@]} -gt 1 ]]; then
808                    for x in "${PATCHES[@]}";
809                    do
810                        debug-print "$FUNCNAME: autopatch: patching from ${x}";
811                        epatch "${x}";
812                    done;
813                else
814                    for x in ${PATCHES} ${PATCHES1};
815                    do
816                        debug-print "$FUNCNAME: autopatch: patching from ${x}";
817                        epatch "${x}";
818                    done;
819                fi
820            ;;
821            all)
822                debug-print-section all;
823                base_src_util unpack autopatch
824            ;;
825        esac;
826        shift;
827    done
828}
829base_src_work ()
830{
831    debug-print-function $FUNCNAME "$@";
832    cd "${S}";
833    while [ "$1" ]; do
834        case $1 in
835            configure)
836                debug-print-section configure;
837                if [[ -x ${ECONF_SOURCE:-.}/configure ]]; then
838                    econf || die "died running econf, $FUNCNAME:configure";
839                fi
840            ;;
841            make)
842                debug-print-section make;
843                if [ -f Makefile ] || [ -f GNUmakefile ] || [ -f makefile ]; then
844                    emake || die "died running emake, $FUNCNAME:make";
845                fi
846            ;;
847            all)
848                debug-print-section all;
849                base_src_work configure make
850            ;;
851        esac;
852        shift;
853    done
854}
855bash-completion_pkg_postinst ()
856{
857    if useq bash-completion; then
858        elog "To enable command-line completion for ${PN}, run:";
859        elog;
860        elog "  eselect bashcomp enable ${BASH_COMPLETION_NAME:-${PN}}";
861        elog;
862        elog "to install locally, or";
863        elog;
864        elog "  eselect bashcomp enable --global ${BASH_COMPLETION_NAME:-${PN}}";
865        elog;
866        elog "to install system-wide.";
867    fi
868}
869bindnow-flags ()
870{
871    ewarn "QA: stop using the bindnow-flags function ... simply drop it from your ebuild"
872}
873built_with_use ()
874{
875    local hidden="no";
876    if [[ $1 == "--hidden" ]]; then
877        hidden="yes";
878        shift;
879    fi;
880    local missing_action="die";
881    if [[ $1 == "--missing" ]]; then
882        missing_action=$2;
883        shift;
884        shift;
885        case ${missing_action} in
886            true | false | die)
887
888            ;;
889            *)
890                die "unknown action '${missing_action}'"
891            ;;
892        esac;
893    fi;
894    local opt=$1;
895    [[ ${opt:0:1} = "-" ]] && shift || opt="-a";
896    local PKG=$(best_version $1);
897    [[ -z ${PKG} ]] && die "Unable to resolve $1 to an installed package";
898    shift;
899    local USEFILE=${ROOT}/var/db/pkg/${PKG}/USE;
900    local IUSEFILE=${ROOT}/var/db/pkg/${PKG}/IUSE;
901    if [[ ! -e ${USEFILE} ]] || [[ ! -e ${IUSEFILE} && ${hidden} == "no" ]]; then
902        case ${missing_action} in
903            true)
904                return 0
905            ;;
906            false)
907                return 1
908            ;;
909            die)
910                die "Unable to determine what USE flags $PKG was built with"
911            ;;
912        esac;
913    fi;
914    if [[ ${hidden} == "no" ]]; then
915        local IUSE_BUILT=($(<"${IUSEFILE}"));
916        local expand;
917        for expand in $(echo ${USE_EXPAND} | tr '[:upper:]' '[:lower:]');
918        do
919            if [[ $1 == ${expand}_* ]]; then
920                expand="";
921                break;
922            fi;
923        done;
924        if [[ -n ${expand} ]]; then
925            if ! has $1 ${IUSE_BUILT[@]#[-+]}; then
926                case ${missing_action} in
927                    true)
928                        return 0
929                    ;;
930                    false)
931                        return 1
932                    ;;
933                    die)
934                        die "$PKG does not actually support the $1 USE flag!"
935                    ;;
936                esac;
937            fi;
938        fi;
939    fi;
940    local USE_BUILT=$(<${USEFILE});
941    while [[ $# -gt 0 ]]; do
942        if [[ ${opt} = "-o" ]]; then
943            has $1 ${USE_BUILT} && return 0;
944        else
945            has $1 ${USE_BUILT} || return 1;
946        fi;
947        shift;
948    done;
949    [[ ${opt} = "-a" ]]
950}
951cdrom_get_cds ()
952{
953    local cdcnt=0;
954    local f=;
955    for f in "$@";
956    do
957        ((++cdcnt));
958        export CDROM_CHECK_${cdcnt}="$f";
959    done;
960    export CDROM_TOTAL_CDS=${cdcnt};
961    export CDROM_CURRENT_CD=1;
962    if [[ -n ${CD_ROOT}${CD_ROOT_1} ]]; then
963        local var=;
964        cdcnt=0;
965        while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
966            ((++cdcnt));
967            var="CD_ROOT_${cdcnt}";
968            [[ -z ${!var} ]] && var="CD_ROOT";
969            if [[ -z ${!var} ]]; then
970                eerror "You must either use just the CD_ROOT";
971                eerror "or specify ALL the CD_ROOT_X variables.";
972                eerror "In this case, you will need ${CDROM_TOTAL_CDS} CD_ROOT_X variables.";
973                die "could not locate CD_ROOT_${cdcnt}";
974            fi;
975        done;
976        export CDROM_ROOT=${CD_ROOT_1:-${CD_ROOT}};
977        einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}";
978        export CDROM_SET=-1;
979        for f in ${CDROM_CHECK_1//:/ };
980        do
981            ((++CDROM_SET));
982            [[ -e ${CD_ROOT}/${f} ]] && break;
983        done;
984        export CDROM_MATCH=${f};
985        return;
986    fi;
987    if [[ ${CDROM_TOTAL_CDS} -eq 1 ]]; then
988        einfo "This ebuild will need the ${CDROM_NAME:-cdrom for ${PN}}";
989        echo;
990        einfo "If you do not have the CD, but have the data files";
991        einfo "mounted somewhere on your filesystem, just export";
992        einfo "the variable CD_ROOT so that it points to the";
993        einfo "directory containing the files.";
994        echo;
995        einfo "For example:";
996        einfo "export CD_ROOT=/mnt/cdrom";
997        echo;
998    else
999        if [[ -n ${CDROM_NAME_SET} ]]; then
1000            cdcnt=0;
1001            while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
1002                ((++cdcnt));
1003                export CDROM_NAME_${cdcnt}="${CDROM_NAME_SET[$((${cdcnt}-1))]}";
1004            done;
1005        fi;
1006        einfo "This package will need access to ${CDROM_TOTAL_CDS} cds.";
1007        cdcnt=0;
1008        while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
1009            ((++cdcnt));
1010            var="CDROM_NAME_${cdcnt}";
1011            [[ ! -z ${!var} ]] && einfo " CD ${cdcnt}: ${!var}";
1012        done;
1013        echo;
1014        einfo "If you do not have the CDs, but have the data files";
1015        einfo "mounted somewhere on your filesystem, just export";
1016        einfo "the following variables so they point to the right place:";
1017        einfon "";
1018        cdcnt=0;
1019        while [[ ${cdcnt} -lt ${CDROM_TOTAL_CDS} ]]; do
1020            ((++cdcnt));
1021            echo -n " CD_ROOT_${cdcnt}";
1022        done;
1023        echo;
1024        einfo "Or, if you have all the files in the same place, or";
1025        einfo "you only have one cdrom, you can export CD_ROOT";
1026        einfo "and that place will be used as the same data source";
1027        einfo "for all the CDs.";
1028        echo;
1029        einfo "For example:";
1030        einfo "export CD_ROOT_1=/mnt/cdrom";
1031        echo;
1032    fi;
1033    export CDROM_SET="";
1034    export CDROM_CURRENT_CD=0;
1035    cdrom_load_next_cd
1036}
1037cdrom_load_next_cd ()
1038{
1039    local var;
1040    ((++CDROM_CURRENT_CD));
1041    unset CDROM_ROOT;
1042    var=CD_ROOT_${CDROM_CURRENT_CD};
1043    [[ -z ${!var} ]] && var="CD_ROOT";
1044    if [[ -z ${!var} ]]; then
1045        var="CDROM_CHECK_${CDROM_CURRENT_CD}";
1046        _cdrom_locate_file_on_cd ${!var};
1047    else
1048        export CDROM_ROOT=${!var};
1049    fi;
1050    einfo "Found CD #${CDROM_CURRENT_CD} root at ${CDROM_ROOT}"
1051}
1052check_license ()
1053{
1054    local lic=$1;
1055    if [ -z "${lic}" ]; then
1056        lic="${PORTDIR}/licenses/${LICENSE}";
1057    else
1058        if [ -e "${PORTDIR}/licenses/${lic}" ]; then
1059            lic="${PORTDIR}/licenses/${lic}";
1060        else
1061            if [ -e "${PWD}/${lic}" ]; then
1062                lic="${PWD}/${lic}";
1063            else
1064                if [ -e "${lic}" ]; then
1065                    lic="${lic}";
1066                fi;
1067            fi;
1068        fi;
1069    fi;
1070    [ ! -f "${lic}" ] && die "Could not find requested license ${lic}";
1071    local l="`basename ${lic}`";
1072    local shopts=$-;
1073    local alic;
1074    set -o noglob;
1075    for alic in ${ACCEPT_LICENSE};
1076    do
1077        if [[ ${alic} == ${l} ]]; then
1078            set +o noglob;
1079            set -${shopts};
1080            return 0;
1081        fi;
1082    done;
1083    set +o noglob;
1084    set -$shopts;
1085    local licmsg=$(emktemp);
1086    cat > ${licmsg}  <<-EOF
1087**********************************************************
1088The following license outlines the terms of use of this
1089package.  You MUST accept this license for installation to
1090continue.  When you are done viewing, hit 'q'.  If you
1091CTRL+C out of this, the install will not run!
1092**********************************************************
1093
1094EOF
1095
1096    cat ${lic} >> ${licmsg};
1097    ${PAGER:-less} ${licmsg} || die "Could not execute pager (${PAGER}) to accept ${lic}";
1098    einfon "Do you accept the terms of this license (${l})? [yes/no] ";
1099    read alic;
1100    case ${alic} in
1101        yes | Yes | y | Y)
1102            return 0
1103        ;;
1104        *)
1105            echo;
1106            echo;
1107            echo;
1108            eerror "You MUST accept the license to continue!  Exiting!";
1109            die "Failed to accept license"
1110        ;;
1111    esac
1112}
1113create_apache_tests_configuration ()
1114{
1115    cat > "${T}/99_subversion_tests.conf"  <<EOF
1116<IfDefine SVN_TESTS>
1117        User $(id -un)
1118        Group $(id -gn)
1119
1120        <Location /svn-test-work/repositories>
1121                DAV svn
1122                SVNParentPath "${S}/subversion/tests/cmdline/svn-test-work/repositories"
1123                AuthzSVNAccessFile "${S}/subversion/tests/cmdline/svn-test-work/authz"
1124                AuthType Basic
1125                AuthName "Subversion Repository"
1126                AuthUserFile "${T}/apache-users"
1127                Require valid-user
1128        </Location>
1129
1130        <Location /svn-test-work/local_tmp/repos>
1131                DAV svn
1132                SVNPath "${S}/subversion/tests/cmdline/svn-test-work/local_tmp/repos"
1133                AuthzSVNAccessFile "${S}/subversion/tests/cmdline/svn-test-work/authz"
1134                AuthType Basic
1135                AuthName "Subversion Repository"
1136                AuthUserFile "${T}/apache-users"
1137                Require valid-user
1138        </Location>
1139</IfDefine>
1140EOF
1141
1142    cat > "${T}/apache-users"  <<EOF
1143jrandom:xCGl35kV9oWCY
1144jconstant:xCGl35kV9oWCY
1145EOF
1146
1147}
1148create_ml_includes ()
1149{
1150    local dest=$1;
1151    shift;
1152    local basedirs=$(create_ml_includes-listdirs "$@");
1153    create_ml_includes-makedestdirs ${dest} ${basedirs};
1154    local file;
1155    for file in $(create_ml_includes-allfiles ${basedirs});
1156    do
1157        ( echo "/* Autogenerated by create_ml_includes() in multilib.eclass */";
1158        local dir;
1159        for dir in ${basedirs};
1160        do
1161            if [[ -f ${D}/${dir}/${file} ]]; then
1162                echo "";
1163                local sym=$(create_ml_includes-sym_for_dir ${dir} "$@");
1164                if [[ ${sym/=} != "${sym}" ]]; then
1165                    echo "#if ${sym}";
1166                else
1167                    if [[ ${sym::1} == "!" ]]; then
1168                        echo "#ifndef ${sym:1}";
1169                    else
1170                        echo "#ifdef ${sym}";
1171                    fi;
1172                fi;
1173                echo "# include <$(create_ml_includes-absolute ${dir}/${file})>";
1174                echo "#endif /* ${sym} */";
1175            fi;
1176        done ) > "${D}/${dest}/${file}";
1177    done
1178}
1179create_ml_includes-absolute ()
1180{
1181    local dst="$(create_ml_includes-tidy_path $1)";
1182    dst=(${dst//\// });
1183    local i;
1184    for ((i=0; i<${#dst[*]}; i++))
1185    do
1186        [ "${dst[i]}" == "include" ] && break;
1187    done;
1188    local strip_upto=$i;
1189    for ((i=strip_upto+1; i<${#dst[*]}-1; i++))
1190    do
1191        echo -n ${dst[i]}/;
1192    done;
1193    echo -n ${dst[i]}
1194}
1195create_ml_includes-allfiles ()
1196{
1197    local basedir file;
1198    for basedir in "$@";
1199    do
1200        for file in $(find "${D}"/${basedir} -type f);
1201        do
1202            echo ${file/${D}\/${basedir}\//};
1203        done;
1204    done | sort | uniq
1205}
1206create_ml_includes-listdirs ()
1207{
1208    local dirs;
1209    local data;
1210    for data in "$@";
1211    do
1212        dirs="${dirs} ${data/*:/}";
1213    done;
1214    echo ${dirs:1}
1215}
1216create_ml_includes-makedestdirs ()
1217{
1218    local dest=$1;
1219    shift;
1220    local basedirs=$@;
1221    dodir ${dest};
1222    local basedir;
1223    for basedir in ${basedirs};
1224    do
1225        local dir;
1226        for dir in $(find "${D}"/${basedir} -type d);
1227        do
1228            dodir ${dest}/${dir/${D}\/${basedir}/};
1229        done;
1230    done
1231}
1232create_ml_includes-sym_for_dir ()
1233{
1234    local dir=$1;
1235    shift;
1236    local data;
1237    for data in "$@";
1238    do
1239        if [[ ${data} == *:${dir} ]]; then
1240            echo ${data/:*/};
1241            return 0;
1242        fi;
1243    done;
1244    echo "Shouldn't be here -- create_ml_includes-sym_for_dir $1 $@";
1245    exit 1
1246}
1247create_ml_includes-tidy_path ()
1248{
1249    local removed=$1;
1250    if [ -n "${removed}" ]; then
1251        while [ "${removed}" != "${removed/\/\//\/}" ]; do
1252            removed=${removed/\/\//\/};
1253        done;
1254        while [ "${removed}" != "${removed//\/.\//\/}" ]; do
1255            removed=${removed//\/.\//\/};
1256        done;
1257        [ "${removed##*/}" = "." ] && removed=${removed%/*};
1258        while [ "${removed}" != "${removed//\/..\/}" ]; do
1259            local p1="${removed%%\/..\/*}";
1260            local p2="${removed#*\/..\/}";
1261            removed="${p1%\/*}/${p2}";
1262        done;
1263        [ "${removed##*/}" = ".." ] && removed=${removed%/*/*};
1264        [ "${removed##*/}" = "" ] && removed=${removed%/*};
1265        echo ${removed};
1266    fi
1267}
1268darwintoolize ()
1269{
1270    ewarn "darwintoolize() is deprecated, please just use elibtoolize()!";
1271    elibtoolize
1272}
1273db_findver ()
1274{
1275    if [ $# -ne 1 ]; then
1276        eerror "Function db_findver needs one argument" 1>&2;
1277        eerror "args given:" 1>&2;
1278        for f in $@;
1279        do
1280            eerror " - \"$@\"" 1>&2;
1281        done;
1282        return 1;
1283    fi;
1284    PKG="$(best_version $1)";
1285    VER="$(get_version_component_range 1-2 "${PKG/*db-/}")";
1286    if [ -d /usr/include/db$(db_ver_to_slot "$VER") ]; then
1287        einfo "Found db version ${VER}" 1>&2;
1288        echo -n "$VER";
1289        return 0;
1290    else
1291        return 1;
1292    fi
1293}
1294db_includedir ()
1295{
1296    if [ $# -eq 0 ]; then
1297        VER="$(db_findver sys-libs/db)" || return 1;
1298        VER="$(db_ver_to_slot "$VER")";
1299        echo "include version ${VER}" 1>&2;
1300        if [ -d "/usr/include/db${VER}" ]; then
1301            echo -n "/usr/include/db${VER}";
1302            return 0;
1303        else
1304            eerror "sys-libs/db package requested, but headers not found" 1>&2;
1305            return 1;
1306        fi;
1307    else
1308        for x in $@;
1309        do
1310            if VER=$(db_findver "=sys-libs/db-${x}*") && [ -d "/usr/include/db$(db_ver_to_slot $VER)" ]; then
1311                echo -n "/usr/include/db$(db_ver_to_slot $VER)";
1312                return 0;
1313            fi;
1314        done;
1315        eerror "No suitable db version found";
1316        return 1;
1317    fi
1318}
1319db_libname ()
1320{
1321    if [ $# -eq 0 ]; then
1322        VER="$(db_findver sys-libs/db)" || return 1;
1323        if [ -e "/usr/$(get_libdir)/libdb-${VER}.so" ]; then
1324            echo -n "db-${VER}";
1325            return 0;
1326        else
1327            eerror "sys-libs/db package requested, but library not found" 1>&2;
1328            return 1;
1329        fi;
1330    else
1331        for x in $@;
1332        do
1333            if VER=$(db_findver "=sys-libs/db-${x}*"); then
1334                if [ -e "/usr/$(get_libdir)/libdb-${VER}.so" ]; then
1335                    echo -n "db-${VER}";
1336                    return 0;
1337                fi;
1338            fi;
1339        done;
1340        eerror "No suitable db version found" 1>&2;
1341        return 1;
1342    fi
1343}
1344db_ver_to_slot ()
1345{
1346    if [ $# -ne 1 ]; then
1347        eerror "Function db_ver_to_slot needs one argument" 1>&2;
1348        eerror "args given:" 1>&2;
1349        for f in $@;
1350        do
1351            eerror " - \"$@\"" 1>&2;
1352        done;
1353        return 1;
1354    fi;
1355    echo -n "${1/.0/}"
1356}
1357delete_all_version_separators ()
1358{
1359    __versionator_shopt_toggle on;
1360    replace_all_version_separators "" "${1}";
1361    __versionator_shopt_toggle off
1362}
1363delete_version_separator ()
1364{
1365    __versionator_shopt_toggle on;
1366    replace_version_separator "${1}" "" "${2}";
1367    __versionator_shopt_toggle off
1368}
1369depend-java-query ()
1370{
1371    USE="${USE}" /usr/bin/depend-java-query "${@}"
1372}
1373depend.apache_pkg_setup ()
1374{
1375    debug-print-function $FUNCNAME $*;
1376    if [[ "${EBUILD_PHASE}" != "setup" ]]; then
1377        die "$FUNCNAME() should be called in pkg_setup()";
1378    fi;
1379    local myiuse=${1:-apache2};
1380    if has ${myiuse} ${IUSE}; then
1381        if use ${myiuse}; then
1382            _init_apache2;
1383        else
1384            _init_no_apache;
1385        fi;
1386    fi
1387}
1388dlopen_lib ()
1389{
1390    if [[ ${CHOST} == *-linux-gnu || ${CHOST} == *-linux-uclibc ]]; then
1391        echo "-ldl";
1392    fi
1393}
1394dobashcompletion ()
1395{
1396    [[ -z "$1" ]] && die "usage: dobashcompletion <file> <new file>";
1397    [[ -z "${BASH_COMPLETION_NAME}" ]] && BASH_COMPLETION_NAME="${2:-${PN}}";
1398    if useq bash-completion; then
1399        insinto /usr/share/bash-completion;
1400        newins "$1" "${BASH_COMPLETION_NAME}" || die "Failed to install $1";
1401    fi
1402}
1403doicon ()
1404{
1405    ( local i j ret;
1406    insinto /usr/share/pixmaps;
1407    for i in "$@";
1408    do
1409        if [[ -f ${i} ]]; then
1410            doins "${i}";
1411            ((ret+=$?));
1412        else
1413            if [[ -d ${i} ]]; then
1414                for j in "${i}"/*.png;
1415                do
1416                    doins "${j}";
1417                    ((ret+=$?));
1418                done;
1419            else
1420                ((++ret));
1421            fi;
1422        fi;
1423    done;
1424    exit ${ret} )
1425}
1426domenu ()
1427{
1428    ( local i j ret=0;
1429    insinto /usr/share/applications;
1430    for i in "$@";
1431    do
1432        if [[ -f ${i} ]]; then
1433            doins "${i}";
1434            ((ret+=$?));
1435        else
1436            if [[ -d ${i} ]]; then
1437                for j in "${i}"/*.desktop;
1438                do
1439                    doins "${j}";
1440                    ((ret+=$?));
1441                done;
1442            else
1443                ((++ret));
1444            fi;
1445        fi;
1446    done;
1447    exit ${ret} )
1448}
1449eaclocal ()
1450{
1451    local aclocal_opts;
1452    local amflags_file;
1453    for amflags_file in GNUmakefile.am Makefile.am GNUmakefile.in Makefile.in;
1454    do
1455        [[ -e ${amflags_file} ]] || continue;
1456        aclocal_opts=$(sed -n '/^ACLOCAL_AMFLAGS[[:space:]]*=/s:[^=]*=::p' ${amflags_file});
1457        eval aclocal_opts=\"${aclocal_opts}\";
1458        break;
1459    done;
1460    if [[ -n ${AT_M4DIR} ]]; then
1461        for x in ${AT_M4DIR};
1462        do
1463            case "${x}" in
1464                "-I")
1465
1466                ;;
1467                *)
1468                    [[ ! -d ${x} ]] && ewarn "eaclocal: '${x}' does not exist";
1469                    aclocal_opts="${aclocal_opts} -I ${x}"
1470                ;;
1471            esac;
1472        done;
1473    fi;
1474    [[ ! -f aclocal.m4 || -n $(grep -e 'generated.*by aclocal' aclocal.m4) ]] && autotools_run_tool aclocal "$@" ${aclocal_opts}
1475}
1476eant ()
1477{
1478    debug-print-function ${FUNCNAME} $*;
1479    if [[ ${EBUILD_PHASE} = compile ]]; then
1480        java-ant-2_src_configure;
1481        java-utils-2_src_prepare;
1482    fi;
1483    if ! hasq java-ant-2 ${INHERITED}; then
1484        local msg="You should inherit java-ant-2 when using eant";
1485        java-pkg_announce-qa-violation "${msg}";
1486    fi;
1487    local antflags="-Dnoget=true -Dmaven.mode.offline=true -Dbuild.sysclasspath=ignore";
1488    java-pkg_init-compiler_;
1489    local compiler="${GENTOO_COMPILER}";
1490    local compiler_env="${JAVA_PKG_COMPILER_DIR}/${compiler}";
1491    local build_compiler="$(source ${compiler_env} 1>/dev/null 2>&1; echo ${ANT_BUILD_COMPILER})";
1492    if [[ "${compiler}" != "javac" && -z "${build_compiler}" ]]; then
1493        die "ANT_BUILD_COMPILER undefined in ${compiler_env}";
1494    fi;
1495    if [[ ${compiler} != "javac" ]]; then
1496        antflags="${antflags} -Dbuild.compiler=${build_compiler}";
1497        local build_compiler_deps="$(source ${JAVA_PKG_COMPILER_DIR}/${compiler} 1>/dev/null 2>&1; echo ${ANT_BUILD_COMPILER_DEPS})";
1498        if [[ -n ${build_compiler_deps} ]]; then
1499            antflags="${antflags} -lib $(java-config -p ${build_compiler_deps})";
1500        fi;
1501    fi;
1502    for arg in "${@}";
1503    do
1504        if [[ ${arg} = -lib ]]; then
1505            if is-java-strict; then
1506                eerror "You should not use the -lib argument to eant because it will fail";
1507                eerror "with JAVA_PKG_STRICT. Please use for example java-pkg_jar-from";
1508                eerror "or ant properties to make dependencies available.";
1509                eerror "For ant tasks use WANT_ANT_TASKS or ANT_TASKS from.";
1510                eerror "split ant (>=dev-java/ant-core-1.7).";
1511                die "eant -lib is deprecated/forbidden";
1512            else
1513                echo "eant -lib is deprecated. Turn JAVA_PKG_STRICT on for";
1514                echo "more info.";
1515            fi;
1516        fi;
1517    done;
1518    local want_ant_tasks;
1519    for i in ${WANT_ANT_TASKS};
1520    do
1521        if [[ ${i} = */*:* ]]; then
1522            i=${i#*/};
1523            i=${i%:0};
1524            want_ant_tasks+="${i/:/-} ";
1525        else
1526            want_ant_tasks+="${i} ";
1527        fi;
1528    done;
1529    ANT_TASKS="${ANT_TASKS:-${want_ant_tasks% }}";
1530    ANT_TASKS="${JAVA_PKG_FORCE_ANT_TASKS:-${ANT_TASKS}}";
1531    ANT_TASKS="${ANT_TASKS:-none}";
1532    if [[ "${ANT_TASKS}" == "all" ]]; then
1533        einfo "Using all available ANT_TASKS";
1534    else
1535        if [[ "${ANT_TASKS}" == "none" ]]; then
1536            einfo "Disabling all optional ANT_TASKS";
1537        else
1538            einfo "Using following ANT_TASKS: ${ANT_TASKS}";
1539        fi;
1540    fi;
1541    export ANT_TASKS;
1542    [[ -n ${JAVA_PKG_DEBUG} ]] && antflags="${antflags} --execdebug -debug";
1543    [[ -n ${PORTAGE_QUIET} ]] && antflags="${antflags} -q";
1544    local gcp="${EANT_GENTOO_CLASSPATH}";
1545    local getjarsarg="";
1546    if [[ ${EBUILD_PHASE} = "test" ]]; then
1547        antflags="${antflags} -DJunit.present=true";
1548        [[ ${ANT_TASKS} = *ant-junit* ]] && gcp="${gcp} junit";
1549        getjarsarg="--with-dependencies";
1550    fi;
1551    local cp;
1552    for atom in ${gcp};
1553    do
1554        cp="${cp}:$(java-pkg_getjars ${getjarsarg} ${atom})";
1555    done;
1556    [[ -n "${EANT_NEEDS_TOOLS}" ]] && cp="${cp}:$(java-config --tools)";
1557    if [[ -n ${cp} ]]; then
1558        cp=${cp#:};
1559        [[ -n ${EANT_GENTOO_CLASSPATH_EXTRA} ]] && cp="${cp}:${EANT_GENTOO_CLASSPATH_EXTRA}";
1560        antflags="${antflags} -Dgentoo.classpath=\"${cp}\"";
1561    fi;
1562    [[ -n ${JAVA_PKG_DEBUG} ]] && echo ant ${antflags} "${@}";
1563    debug-print "Calling ant (GENTOO_VM: ${GENTOO_VM}): ${antflags} ${@}";
1564    ant ${antflags} "${@}" || die "eant failed"
1565}
1566eautoconf ()
1567{
1568    if [[ ! -f configure.ac && ! -f configure.in ]]; then
1569        echo;
1570        eerror "No configure.{ac,in} present in '$(pwd | sed -e 's:.*/::')'!";
1571        echo;
1572        die "No configure.{ac,in} present!";
1573    fi;
1574    autotools_run_tool autoconf "$@"
1575}
1576eautoheader ()
1577{
1578    [[ -n $(autotools_check_macro "AC_CONFIG_HEADERS") ]] || return 0;
1579    NO_FAIL=1 autotools_run_tool autoheader "$@"
1580}
1581eautomake ()
1582{
1583    local extra_opts;
1584    local makefile_name;
1585    if [[ -f GNUmakefile.am ]]; then
1586        makefile_name="GNUmakefile";
1587    else
1588        if [[ -f Makefile.am ]]; then
1589            makefile_name="Makefile";
1590        else
1591            return 0;
1592        fi;
1593    fi;
1594    if [[ -z ${FROM_EAUTORECONF} && -f ${makefile_name}.in ]]; then
1595        local used_automake;
1596        local installed_automake;
1597        installed_automake=$(automake --version | head -n 1 |                   sed -e 's:.*(GNU automake) ::');
1598        used_automake=$(head -n 1 < ${makefile_name}.in |                       sed -e 's:.*by automake \(.*\) from .*:\1:');
1599        if [[ ${installed_automake} != ${used_automake} ]]; then
1600            einfo "Automake used for the package (${used_automake}) differs from";
1601            einfo "the installed version (${installed_automake}).";
1602            eautoreconf;
1603            return 0;
1604        fi;
1605    fi;
1606    [[ -f INSTALL && -f AUTHORS && -f ChangeLog && -f NEWS ]] || extra_opts="${extra_opts} --foreign";
1607    autotools_run_tool automake --add-missing --copy ${extra_opts} "$@"
1608}
1609eautoreconf ()
1610{
1611    local pwd=$(pwd) x auxdir g=;
1612    if [[ -z ${AT_NO_RECURSIVE} ]]; then
1613        for x in $(autotools_get_subdirs);
1614        do
1615            if [[ -d ${x} ]]; then
1616                cd "${x}";
1617                AT_NOELIBTOOLIZE="yes" eautoreconf;
1618                cd "${pwd}";
1619            fi;
1620        done;
1621    fi;
1622    auxdir=$(autotools_get_auxdir);
1623    einfo "Running eautoreconf in '$(pwd)' ...";
1624    [[ -n ${auxdir} ]] && mkdir -p ${auxdir};
1625    eaclocal;
1626    [[ ${CHOST} == *-darwin* ]] && g=g;
1627    if ${LIBTOOLIZE:-${g}libtoolize} -n --install >&/dev/null; then
1628        _elibtoolize --copy --force --install;
1629    else
1630        _elibtoolize --copy --force;
1631    fi;
1632    eautoconf;
1633    eautoheader;
1634    FROM_EAUTORECONF="yes" eautomake ${AM_OPTS};
1635    [[ ${AT_NOELIBTOOLIZE} == "yes" ]] && return 0;
1636    S=${pwd} elibtoolize;
1637    return 0
1638}
1639ebeep ()
1640{
1641    local n;
1642    if [[ -z ${EBEEP_IGNORE} ]]; then
1643        for ((n=1 ; n <= ${1:-5} ; n++))
1644        do
1645            echo -ne "\a";
1646            sleep 0.1 >&/dev/null;
1647            sleep 0,1 >&/dev/null;
1648            echo -ne "\a";
1649            sleep 1;
1650        done;
1651    fi
1652}
1653ecvs_clean ()
1654{
1655    [[ -z $* ]] && set -- .;
1656    find "$@" -type d -name 'CVS' -prune -print0 | xargs -0 rm -rf;
1657    find "$@" -type f -name '.cvs*' -print0 | xargs -0 rm -rf
1658}
1659edos2unix ()
1660{
1661    echo "$@" | xargs sed -i 's/\r$//'
1662}
1663egetent ()
1664{
1665    case ${CHOST} in
1666        *-darwin9)
1667            local mytype=$1;
1668            [[ "passwd" == $mytype ]] && mytype="Users";
1669            [[ "group" == $mytype ]] && mytype="Groups";
1670            case "$2" in
1671                *[!0-9]*)
1672                    dscl . -read /$mytype/$2 2> /dev/null | grep RecordName
1673                ;;
1674                *)
1675                    local mykey="UniqueID";
1676                    [[ $mytype == "Groups" ]] && mykey="PrimaryGroupID";
1677                    dscl . -search /$mytype $mykey $2 2> /dev/null
1678                ;;
1679            esac
1680        ;;
1681        *-darwin*)
1682            case "$2" in
1683                *[!0-9]*)
1684                    nidump $1 . | awk -F":" "{ if (\$1 ~ /^$2$/) {print \$0;exit;} }"
1685                ;;
1686                *)
1687                    nidump $1 . | awk -F":" "{ if (\$3 == $2) {print \$0;exit;} }"
1688                ;;
1689            esac
1690        ;;
1691        *-freebsd* | *-dragonfly*)
1692            local opts action="user";
1693            [[ $1 == "passwd" ]] || action="group";
1694            if [[ $2 == [[:digit:]]* ]]; then
1695                [[ ${action} == "user" ]] && opts="-u" || opts="-g";
1696            fi;
1697            pw show ${action} ${opts} "$2" -q
1698        ;;
1699        *-netbsd* | *-openbsd*)
1700            grep "$2:\*:" /etc/$1
1701        ;;
1702        *)
1703            type -p nscd >&/dev/null && nscd -i "$1";
1704            getent "$1" "$2"
1705        ;;
1706    esac
1707}
1708egethome ()
1709{
1710    ent=$(egetent passwd $1);
1711    case ${CHOST} in
1712        *-darwin* | *-freebsd* | *-dragonfly*)
1713            echo ${ent} | cut -d: -f9
1714        ;;
1715        *)
1716            echo ${ent} | cut -d: -f6
1717        ;;
1718    esac
1719}
1720egetshell ()
1721{
1722    ent=$(egetent passwd "$1");
1723    case ${CHOST} in
1724        *-darwin* | *-freebsd* | *-dragonfly*)
1725            echo ${ent} | cut -d: -f10
1726        ;;
1727        *)
1728            echo ${ent} cut -d: -f7
1729        ;;
1730    esac
1731}
1732ejavac ()
1733{
1734    debug-print-function ${FUNCNAME} $*;
1735    java-pkg_init-compiler_;
1736    local compiler_executable;
1737    compiler_executable=$(java-pkg_get-javac);
1738    if [[ ${?} != 0 ]]; then
1739        eerror "There was a problem determining compiler: ${compiler_executable}";
1740        die "get-javac failed";
1741    fi;
1742    local javac_args;
1743    javac_args="$(java-pkg_javac-args)";
1744    if [[ ${?} != 0 ]]; then
1745        eerror "There was a problem determining JAVACFLAGS: ${javac_args}";
1746        die "java-pkg_javac-args failed";
1747    fi;
1748    [[ -n ${JAVA_PKG_DEBUG} ]] && echo ${compiler_executable} ${javac_args} "${@}";
1749    ${compiler_executable} ${javac_args} "${@}" || die "ejavac failed"
1750}
1751ejunit ()
1752{
1753    debug-print-function ${FUNCNAME} $*;
1754    local pkgs;
1755    if [[ -f ${JAVA_PKG_DEPEND_FILE} ]]; then
1756        for atom in $(cat ${JAVA_PKG_DEPEND_FILE} | tr : ' ');
1757        do
1758            pkgs=${pkgs},$(echo ${atom} | sed -re "s/^.*@//");
1759        done;
1760    fi;
1761    local cp=$(java-pkg_getjars --with-dependencies junit${pkgs});
1762    if [[ ${1} = -cp || ${1} = -classpath ]]; then
1763        cp="${2}:${cp}";
1764        shift 2;
1765    else
1766        cp=".:${cp}";
1767    fi;
1768    local runner=junit.textui.TestRunner;
1769    debug-print "Calling: java -cp \"${cp}\" -Djava.awt.headless=true ${runner} ${@}";
1770    java -cp "${cp}" -Djava.awt.headless=true ${runner} "${@}" || die "Running junit failed"
1771}
1772elibtoolize ()
1773{
1774    local x=;
1775    local y=;
1776    local do_portage="no";
1777    local do_reversedeps="no";
1778    local do_only_patches="no";
1779    local do_uclibc="yes";
1780    local deptoremove=;
1781    local my_dirlist=;
1782    local elt_patches="install-sh ltmain portage relink max_cmd_len sed test tmp cross as-needed";
1783    local start_dir=${PWD};
1784    my_dirlist=$(ELT_find_ltmain_sh);
1785    for x in "$@";
1786    do
1787        case "${x}" in
1788            "--portage")
1789                do_portage="yes"
1790            ;;
1791            "--reverse-deps")
1792                do_reversedeps="yes";
1793                elt_patches="${elt_patches} fix-relink"
1794            ;;
1795            "--patch-only")
1796                do_only_patches="yes"
1797            ;;
1798            "^--remove-internal-dep="*)
1799                deptoremove=$(echo "${x}" | sed -e 's|--remove-internal-dep=||');
1800                [[ -n ${deptoremove} ]] && elt_patches="${elt_patches} rem-int-dep"
1801            ;;
1802            "--shallow")
1803                if [[ -f ${S}/ltmain.sh ]]; then
1804                    my_dirlist=${S};
1805                else
1806                    my_dirlist=;
1807                fi
1808            ;;
1809            "--no-uclibc")
1810                do_uclibc="no"
1811            ;;
1812            *)
1813                eerror "Invalid elibtoolize option: ${x}";
1814                die "elibtoolize called with ${x} ??"
1815            ;;
1816        esac;
1817    done;
1818    [[ ${do_uclibc} == "yes" ]] && elt_patches="${elt_patches} uclibc-conf uclibc-ltconf";
1819    [[ ${CHOST} == *"-freebsd"* ]] && elt_patches="${elt_patches} fbsd-conf fbsd-ltconf";
1820    [[ ${CHOST} == *"-darwin"* ]] && elt_patches="${elt_patches} darwin-ltconf darwin-ltmain";
1821    for x in ${my_dirlist};
1822    do
1823        local tmp=$(echo "${x}" | sed -e "s|${WORKDIR}||");
1824        export ELT_APPLIED_PATCHES=;
1825        export ELT_LTMAIN_SH="${x}/ltmain.sh";
1826        [[ -f ${x}/.elibtoolized ]] && continue;
1827        cd ${x};
1828        einfo "Running elibtoolize in: $(echo "/${tmp}" | sed -e 's|//|/|g; s|^/||')";
1829        for y in ${elt_patches};
1830        do
1831            local ret=0;
1832            case "${y}" in
1833                "portage")
1834                    if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
1835                        ELT_walk_patches "${x}/ltmain.sh" "${y}";
1836                        ret=$?;
1837                    fi
1838                ;;
1839                "rem-int-dep")
1840                    ELT_walk_patches "${x}/ltmain.sh" "${y}" "${deptoremove}";
1841                    ret=$?
1842                ;;
1843                "fix-relink")
1844                    if [[ -n $(grep 'inst_prefix_dir' "${x}/ltmain.sh") ]]; then
1845                        ELT_walk_patches "${x}/ltmain.sh" "${y}";
1846                        ret=$?;
1847                    fi
1848                ;;
1849                "max_cmd_len")
1850                    if [[ -n $(grep 'max_cmd_len' "${x}/ltmain.sh") ]]; then
1851                        ELT_walk_patches "${x}/ltmain.sh" "${y}";
1852                        ret=$?;
1853                    fi
1854                ;;
1855                "as-needed")
1856                    ELT_walk_patches "${x}/ltmain.sh" "${y}";
1857                    ret=$?
1858                ;;
1859                "uclibc-conf")
1860                    if [[ -e ${x}/configure && -n $(grep 'Transform linux' "${x}/configure") ]]; then
1861                        ELT_walk_patches "${x}/configure" "${y}";
1862                        ret=$?;
1863                    else
1864                        if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'Transform linux' "${x}/../configure") ]]; then
1865                            ELT_walk_patches "${x}/../configure" "${y}";
1866                            ret=$?;
1867                        fi;
1868                    fi
1869                ;;
1870                "uclibc-ltconf")
1871                    if [[ -s ${x}/ltconfig ]]; then
1872                        ELT_walk_patches "${x}/ltconfig" "${y}";
1873                        ret=$?;
1874                    fi
1875                ;;
1876                "fbsd-conf")
1877                    if [[ -e ${x}/configure && -n $(grep 'version_type=freebsd-' "${x}/configure") ]]; then
1878                        ELT_walk_patches "${x}/configure" "${y}";
1879                        ret=$?;
1880                    else
1881                        if [[ ! -e ${x}/configure && -e ${x}/../configure && -n $(grep 'version_type=freebsd-' "${x}/../configure") ]]; then
1882                            ELT_walk_patches "${x}/../configure" "${y}";
1883                            ret=$?;
1884                        fi;
1885                    fi
1886                ;;
1887                "fbsd-ltconf")
1888                    if [[ -s ${x}/ltconfig ]]; then
1889                        ELT_walk_patches "${x}/ltconfig" "${y}";
1890                        ret=$?;
1891                    fi
1892                ;;
1893                "darwin-ltconf")
1894                    if [[ -s ${x}/ltconfig ]]; then
1895                        ELT_walk_patches "${x}/ltconfig" "${y}";
1896                        ret=$?;
1897                    fi
1898                ;;
1899                "install-sh")
1900                    ELT_walk_patches "${x}/install-sh" "${y}";
1901                    ret=$?
1902                ;;
1903                "cross")
1904                    if tc-is-cross-compiler; then
1905                        ELT_walk_patches "${x}/ltmain.sh" "${y}";
1906                        ret=$?;
1907                    fi
1908                ;;
1909                *)
1910                    ELT_walk_patches "${x}/ltmain.sh" "${y}";
1911                    ret=$?
1912                ;;
1913            esac;
1914            if [[ ${ret} -ne 0 ]]; then
1915                case ${y} in
1916                    "relink")
1917                        local version=$(ELT_libtool_version "${x}/ltmain.sh");
1918                        if [[ -z $(grep 'inst_prefix_dir' "${x}/ltmain.sh") && $(VER_to_int "${version}") -ge $(VER_to_int "1.4.0") ]]; then
1919                            ewarn "  Could not apply relink.patch!";
1920                        fi
1921                    ;;
1922                    "portage")
1923                        if [[ ${do_portage} == "yes" ]]; then
1924                            if [[ -z $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
1925                                echo;
1926                                eerror "Portage patch requested, but failed to apply!";
1927                                eerror "Please bug azarah or vapier to add proper patch.";
1928                                die "Portage patch requested, but failed to apply!";
1929                            fi;
1930                        else
1931                            if [[ -n $(grep 'We do not want portage' "${x}/ltmain.sh") ]]; then
1932                                :;
1933                            else
1934                                local version=$(                                                                        eval $(grep -e '^[[:space:]]*VERSION=' "${x}/ltmain.sh");                                                                       echo "${VERSION}");
1935                                echo;
1936                                eerror "Portage patch failed to apply (ltmain.sh version ${version})!";
1937                                eerror "Please bug azarah or vapier to add proper patch.";
1938                                die "Portage patch failed to apply!";
1939                            fi;
1940                            ELT_APPLIED_PATCHES="portage";
1941                        fi
1942                    ;;
1943                    "uclibc-"*)
1944                        [[ ${CHOST} == *"-uclibc" ]] && ewarn "  uClibc patch set '${y}' failed to apply!"
1945                    ;;
1946                    "fbsd-"*)
1947                        if [[ ${CHOST} == *"-freebsd"* ]]; then
1948                            if [[ -z $(grep 'Handle Gentoo/FreeBSD as it was Linux'                                                             "${x}/configure" "${x}/../configure" 2>/dev/null) ]]; then
1949                                eerror "  FreeBSD patch set '${y}' failed to apply!";
1950                                die "FreeBSD patch set '${y}' failed to apply!";
1951                            fi;
1952                        fi
1953                    ;;
1954                    "darwin-"*)
1955                        [[ ${CHOST} == *"-darwin"* ]] && ewarn "  Darwin patch set '${y}' failed to apply!"
1956                    ;;
1957                esac;
1958            fi;
1959        done;
1960        if [[ -z ${ELT_APPLIED_PATCHES} ]]; then
1961            if [[ ${do_portage} == "no" && ${do_reversedeps} == "no" && ${do_only_patches} == "no" && ${deptoremove} == "" ]]; then
1962                ewarn "Cannot apply any patches, please file a bug about this";
1963                die;
1964            fi;
1965        fi;
1966        [[ -f ${x}/libtool ]] && rm -f "${x}/libtool";
1967         >> "${x}/.elibtoolized";
1968    done;
1969    cd "${start_dir}"
1970}
1971elisp-comp ()
1972{
1973    die "Function elisp-comp is not supported any more, see bug 235442"
1974}
1975elisp-compile ()
1976{
1977    ebegin "Compiling GNU Emacs Elisp files";
1978    ${EMACS} ${EMACSFLAGS} ${BYTECOMPFLAGS} -f batch-byte-compile "$@";
1979    eend $? "elisp-compile: batch-byte-compile failed"
1980}
1981elisp-emacs-version ()
1982{
1983    echo "(princ emacs-version)" > "${T}"/emacs-version.el;
1984    ${EMACS} ${EMACSFLAGS} -l "${T}"/emacs-version.el;
1985    rm -f "${T}"/emacs-version.el
1986}
1987elisp-install ()
1988{
1989    local subdir="$1";
1990    shift;
1991    ebegin "Installing Elisp files for GNU Emacs support";
1992    ( insinto "${SITELISP}/${subdir}";
1993    doins "$@" );
1994    eend $? "elisp-install: doins failed"
1995}
1996elisp-make-autoload-file ()
1997{
1998    local f="${1:-${PN}-autoloads.el}";
1999    shift;
2000    ebegin "Generating autoload file for GNU Emacs";
2001    sed 's/^FF/\f/' > "${f}"  <<-EOF
2002;;; ${f##*/} --- autoloads for ${P}
2003
2004;;; Commentary:
2005;; Automatically generated by elisp-common.eclass
2006;; DO NOT EDIT THIS FILE
2007
2008;;; Code:
2009FF
2010;; Local Variables:
2011;; version-control: never
2012;; no-byte-compile: t
2013;; no-update-autoloads: t
2014;; End:
2015;;; ${f##*/} ends here
2016EOF
2017
2018    ${EMACS} ${EMACSFLAGS} --eval "(setq make-backup-files nil)" --eval "(setq generated-autoload-file (expand-file-name \"${f}\"))" -f batch-update-autoloads "${@-.}";
2019    eend $? "elisp-make-autoload-file: batch-update-autoloads failed"
2020}
2021elisp-site-file-install ()
2022{
2023    local sf="${1##*/}" my_pn="${2:-${PN}}" ret;
2024    local header=";;; ${PN} site-lisp configuration";
2025    [[ ${sf} == [0-9][0-9]*-gentoo*.el ]] || ewarn "elisp-site-file-install: bad name of site-init file";
2026    sf="${T}/${sf/%-gentoo*.el/-gentoo.el}";
2027    ebegin "Installing site initialisation file for GNU Emacs";
2028    [[ $1 = ${sf} ]] || cp "$1" "${sf}";
2029    sed -i -e "1{:x;/^\$/{n;bx;};/^;.*${PN}/I!s:^:${header}\n\n:;1s:^:\n:;}" -e "s:@SITELISP@:${SITELISP}/${my_pn}:g" -e "s:@SITEETC@:${SITEETC}/${my_pn}:g;\$q" "${sf}";
2030    ( insinto "${SITELISP}/site-gentoo.d";
2031    doins "${sf}" );
2032    ret=$?;
2033    rm -f "${sf}";
2034    eend ${ret} "elisp-site-file-install: doins failed"
2035}
2036elisp-site-regen ()
2037{
2038    local i sf line obsolete;
2039    local -a sflist;
2040    if [ ! -d "${ROOT}${SITELISP}" ]; then
2041        eerror "elisp-site-regen: Directory ${SITELISP} does not exist";
2042        return 1;
2043    fi;
2044    if [ ! -d "${T}" ]; then
2045        eerror "elisp-site-regen: Temporary directory ${T} does not exist";
2046        return 1;
2047    fi;
2048    einfon "Regenerating site-gentoo.el for GNU Emacs (${EBUILD_PHASE}) ...";
2049    rm -f "${ROOT}${SITELISP}"/00site-gentoo.el;
2050    local old_shopts=$(shopt -p nullglob);
2051    shopt -s nullglob;
2052    for sf in "${ROOT}${SITELISP}"/[0-9][0-9]*-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.d/[0-9][0-9]*.el;
2053    do
2054        [ -r "${sf}" ] || continue;
2055        for ((i=${#sflist[@]}; i>0; i--))
2056        do
2057            [[ ${sf##*/} < ${sflist[i-1]##*/} ]] || break;
2058            sflist[i]=${sflist[i-1]};
2059        done;
2060        sflist[i]=${sf};
2061        [ "${sf%/*}" = "${ROOT}${SITELISP}" ] && obsolete=t;
2062    done;
2063    eval "${old_shopts}";
2064    cat > "${T}"/site-gentoo.el  <<-EOF
2065;;; site-gentoo.el --- site initialisation for Gentoo-installed packages
2066
2067;;; Commentary:
2068;; Automatically generated by elisp-common.eclass
2069;; DO NOT EDIT THIS FILE
2070
2071;;; Code:
2072EOF
2073
2074    sed '$q' "${sflist[@]}" < /dev/null >> "${T}"/site-gentoo.el;
2075    cat >> "${T}"/site-gentoo.el  <<-EOF
2076
2077(provide 'site-gentoo)
2078
2079;; Local Variables:
2080;; no-byte-compile: t
2081;; End:
2082;;; site-gentoo.el ends here
2083EOF
2084
2085    if cmp -s "${ROOT}${SITELISP}"/site-gentoo.el "${T}"/site-gentoo.el; then
2086        echo " no changes.";
2087    else
2088        mv "${T}"/site-gentoo.el "${ROOT}${SITELISP}"/site-gentoo.el;
2089        echo;
2090        einfo "... ${#sflist[@]} site initialisation file(s) included.";
2091    fi;
2092    if [ "${obsolete}" ]; then
2093        echo;
2094        while read line; do
2095            ewarn "${line}";
2096        done  <<-EOF
2097Site-initialisation files of Emacs packages are now installed in
2098/usr/share/emacs/site-lisp/site-gentoo.d/. We strongly recommend
2099that you use app-admin/emacs-updater to rebuild the installed
2100Emacs packages.
2101EOF
2102
2103    fi
2104    rm -f "${T}"/site-gentoo.el;
2105    return 0
2106}
2107emktemp ()
2108{
2109    local exe="touch";
2110    [[ $1 == -d ]] && exe="mkdir" && shift;
2111    local topdir=$1;
2112    if [[ -z ${topdir} ]]; then
2113        [[ -z ${T} ]] && topdir="/tmp" || topdir=${T};
2114    fi;
2115    if ! type -P mktemp > /dev/null; then
2116        local tmp=/;
2117        while [[ -e ${tmp} ]]; do
2118            tmp=${topdir}/tmp.${RANDOM}.${RANDOM}.${RANDOM};
2119        done;
2120        ${exe} "${tmp}" || ${exe} -p "${tmp}";
2121        echo "${tmp}";
2122    else
2123        if [[ ${exe} == "touch" ]]; then
2124            TMPDIR="${topdir}" mktemp -t tmp.XXXXXXXXXX;
2125        else
2126            TMPDIR="${topdir}" mktemp -dt tmp.XXXXXXXXXX;
2127        fi;
2128    fi
2129}
2130enewgroup ()
2131{
2132    case ${EBUILD_PHASE} in
2133        unpack | compile | test | install)
2134            eerror "'enewgroup()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
2135            eerror "Package fails at QA and at life.  Please file a bug.";
2136            die "Bad package!  enewgroup is only for use in pkg_* functions!"
2137        ;;
2138    esac;
2139    local egroup="$1";
2140    shift;
2141    if [ -z "${egroup}" ]; then
2142        eerror "No group specified !";
2143        die "Cannot call enewgroup without a group";
2144    fi;
2145    if [[ -n $(egetent group "${egroup}") ]]; then
2146        return 0;
2147    fi;
2148    einfo "Adding group '${egroup}' to your system ...";
2149    local opts=;
2150    local egid="$1";
2151    shift;
2152    if [ ! -z "${egid}" ]; then
2153        if [ "${egid}" -gt 0 ]; then
2154            if [ -z "`egetent group ${egid}`" ]; then
2155                if [[ "${CHOST}" == *-darwin* ]]; then
2156                    opts="${opts} ${egid}";
2157                else
2158                    opts="${opts} -g ${egid}";
2159                fi;
2160            else
2161                egid="next available; requested gid taken";
2162            fi;
2163        else
2164            eerror "Groupid given but is not greater than 0 !";
2165            die "${egid} is not a valid GID";
2166        fi;
2167    else
2168        egid="next available";
2169    fi;
2170    einfo " - Groupid: ${egid}";
2171    local eextra="$@";
2172    opts="${opts} ${eextra}";
2173    local oldsandbox="${SANDBOX_ON}";
2174    export SANDBOX_ON="0";
2175    case ${CHOST} in
2176        *-darwin*)
2177            if [ ! -z "${eextra}" ]; then
2178                einfo "Extra options are not supported on Darwin/OS X yet";
2179                einfo "Please report the ebuild along with the info below";
2180                einfo "eextra: ${eextra}";
2181                die "Required function missing";
2182            fi;
2183            case ${egid} in
2184                *[!0-9]*)
2185                    for ((egid = 101; egid <= 999; egid++))
2186                    do
2187                        [[ -z $(egetent group ${egid}) ]] && break;
2188                    done
2189                ;;
2190            esac;
2191            dscl . create /groups/${egroup} gid ${egid};
2192            dscl . create /groups/${egroup} passwd '*'
2193        ;;
2194        *-freebsd* | *-dragonfly*)
2195            case ${egid} in
2196                *[!0-9]*)
2197                    for ((egid = 101; egid <= 999; egid++))
2198                    do
2199                        [[ -z $(egetent group ${egid}) ]] && break;
2200                    done
2201                ;;
2202            esac;
2203            pw groupadd ${egroup} -g ${egid} || die "enewgroup failed"
2204        ;;
2205        *-netbsd*)
2206            case ${egid} in
2207                *[!0-9]*)
2208                    for ((egid = 101; egid <= 999; egid++))
2209                    do
2210                        [[ -z $(egetent group ${egid}) ]] && break;
2211                    done
2212                ;;
2213            esac;
2214            groupadd -g ${egid} ${egroup} || die "enewgroup failed"
2215        ;;
2216        *)
2217            groupadd ${opts} ${egroup} || die "enewgroup failed"
2218        ;;
2219    esac;
2220    export SANDBOX_ON="${oldsandbox}"
2221}
2222enewuser ()
2223{
2224    case ${EBUILD_PHASE} in
2225        unpack | compile | test | install)
2226            eerror "'enewuser()' called from '${EBUILD_PHASE}()' which is not a pkg_* function.";
2227            eerror "Package fails at QA and at life.  Please file a bug.";
2228            die "Bad package!  enewuser is only for use in pkg_* functions!"
2229        ;;
2230    esac;
2231    local euser=$1;
2232    shift;
2233    if [[ -z ${euser} ]]; then
2234        eerror "No username specified !";
2235        die "Cannot call enewuser without a username";
2236    fi;
2237    if [[ -n $(egetent passwd "${euser}") ]]; then
2238        return 0;
2239    fi;
2240    einfo "Adding user '${euser}' to your system ...";
2241    local opts=;
2242    local euid=$1;
2243    shift;
2244    if [[ -n ${euid} && ${euid} != -1 ]]; then
2245        if [[ ${euid} -gt 0 ]]; then
2246            if [[ -n $(egetent passwd ${euid}) ]]; then
2247                euid="next";
2248            fi;
2249        else
2250            eerror "Userid given but is not greater than 0 !";
2251            die "${euid} is not a valid UID";
2252        fi;
2253    else
2254        euid="next";
2255    fi;
2256    if [[ ${euid} == "next" ]]; then
2257        for ((euid = 101; euid <= 999; euid++))
2258        do
2259            [[ -z $(egetent passwd ${euid}) ]] && break;
2260        done;
2261    fi;
2262    opts="${opts} -u ${euid}";
2263    einfo " - Userid: ${euid}";
2264    local eshell=$1;
2265    shift;
2266    if [[ ! -z ${eshell} ]] && [[ ${eshell} != "-1" ]]; then
2267        if [[ ! -e ${ROOT}${eshell} ]]; then
2268            eerror "A shell was specified but it does not exist !";
2269            die "${eshell} does not exist in ${ROOT}";
2270        fi;
2271        if [[ ${eshell} == */false || ${eshell} == */nologin ]]; then
2272            eerror "Do not specify ${eshell} yourself, use -1";
2273            die "Pass '-1' as the shell parameter";
2274        fi;
2275    else
2276        for shell in /sbin/nologin /usr/sbin/nologin /bin/false /usr/bin/false /dev/null;
2277        do
2278            [[ -x ${ROOT}${shell} ]] && break;
2279        done;
2280        if [[ ${shell} == "/dev/null" ]]; then
2281            eerror "Unable to identify the shell to use, proceeding with userland default.";
2282            case ${USERLAND} in
2283                GNU)
2284                    shell="/bin/false"
2285                ;;
2286                BSD)
2287                    shell="/sbin/nologin"
2288                ;;
2289                Darwin)
2290                    shell="/usr/sbin/nologin"
2291                ;;
2292                *)
2293                    die "Unable to identify the default shell for userland ${USERLAND}"
2294                ;;
2295            esac;
2296        fi;
2297        eshell=${shell};
2298    fi;
2299    einfo " - Shell: ${eshell}";
2300    opts="${opts} -s ${eshell}";
2301    local ehome=$1;
2302    shift;
2303    if [[ -z ${ehome} ]] || [[ ${ehome} == "-1" ]]; then
2304        ehome="/dev/null";
2305    fi;
2306    einfo " - Home: ${ehome}";
2307    opts="${opts} -d ${ehome}";
2308    local egroups=$1;
2309    shift;
2310    if [[ ! -z ${egroups} ]]; then
2311        local oldifs=${IFS};
2312        local defgroup="" exgroups="";
2313        export IFS=",";
2314        for g in ${egroups};
2315        do
2316            export IFS=${oldifs};
2317            if [[ -z $(egetent group "${g}") ]]; then
2318                eerror "You must add group ${g} to the system first";
2319                die "${g} is not a valid GID";
2320            fi;
2321            if [[ -z ${defgroup} ]]; then
2322                defgroup=${g};
2323            else
2324                exgroups="${exgroups},${g}";
2325            fi;
2326            export IFS=",";
2327        done;
2328        export IFS=${oldifs};
2329        opts="${opts} -g ${defgroup}";
2330        if [[ ! -z ${exgroups} ]]; then
2331            opts="${opts} -G ${exgroups:1}";
2332        fi;
2333    else
2334        egroups="(none)";
2335    fi;
2336    einfo " - Groups: ${egroups}";
2337    local oldsandbox=${SANDBOX_ON};
2338    export SANDBOX_ON="0";
2339    case ${CHOST} in
2340        *-darwin*)
2341            if [[ -z $@ ]]; then
2342                dscl . create /users/${euser} uid ${euid};
2343                dscl . create /users/${euser} shell ${eshell};
2344                dscl . create /users/${euser} home ${ehome};
2345                dscl . create /users/${euser} realname "added by portage for ${PN}";
2346                local oldifs=${IFS};
2347                export IFS=",";
2348                for g in ${egroups};
2349                do
2350                    dscl . merge /groups/${g} users ${euser};
2351                done;
2352                export IFS=${oldifs};
2353            else
2354                einfo "Extra options are not supported on Darwin yet";
2355                einfo "Please report the ebuild along with the info below";
2356                einfo "eextra: $@";
2357                die "Required function missing";
2358            fi
2359        ;;
2360        *-freebsd* | *-dragonfly*)
2361            if [[ -z $@ ]]; then
2362                pw useradd ${euser} ${opts} -c "added by portage for ${PN}" die "enewuser failed";
2363            else
2364                einfo " - Extra: $@";
2365                pw useradd ${euser} ${opts} "$@" || die "enewuser failed";
2366            fi
2367        ;;
2368        *-netbsd*)
2369            if [[ -z $@ ]]; then
2370                useradd ${opts} ${euser} || die "enewuser failed";
2371            else
2372                einfo " - Extra: $@";
2373                useradd ${opts} ${euser} "$@" || die "enewuser failed";
2374            fi
2375        ;;
2376        *-openbsd*)
2377            if [[ -z $@ ]]; then
2378                useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} || die "enewuser failed";
2379            else
2380                einfo " - Extra: $@";
2381                useradd -u ${euid} -s ${eshell} -d ${ehome} -c "Added by portage for ${PN}" -g ${egroups} ${euser} "$@" || die "enewuser failed";
2382            fi
2383        ;;
2384        *)
2385            if [[ -z $@ ]]; then
2386                useradd ${opts} ${euser} -c "added by portage for ${PN}" || die "enewuser failed";
2387            else
2388                einfo " - Extra: $@";
2389                useradd ${opts} ${euser} "$@" || die "enewuser failed";
2390            fi
2391        ;;
2392    esac;
2393    if [[ ! -e ${ROOT}/${ehome} ]]; then
2394        einfo " - Creating ${ehome} in ${ROOT}";
2395        mkdir -p "${ROOT}/${ehome}";
2396        chown ${euser} "${ROOT}/${ehome}";
2397        chmod 755 "${ROOT}/${ehome}";
2398    fi;
2399    export SANDBOX_ON=${oldsandbox}
2400}
2401epatch ()
2402{
2403    function _epatch_draw_line ()
2404    {
2405        [[ -z $1 ]] && set "$(printf "%65s" '')";
2406        echo "${1//?/=}"
2407    };
2408    function _epatch_assert ()
2409    {
2410        local _pipestatus=${PIPESTATUS[*]};
2411        [[ ${_pipestatus// /} -eq 0 ]]
2412    };
2413    local PIPE_CMD="";
2414    local STDERR_TARGET="${T}/$$.out";
2415    local PATCH_TARGET="${T}/$$.patch";
2416    local PATCH_SUFFIX="";
2417    local SINGLE_PATCH="no";
2418    local x="";
2419    unset P4CONFIG P4PORT P4USER;
2420    if [ "$#" -gt 1 ]; then
2421        local m="";
2422        for m in "$@";
2423        do
2424            epatch "${m}";
2425        done;
2426        return 0;
2427    fi;
2428    if [ -n "$1" -a -f "$1" ]; then
2429        SINGLE_PATCH="yes";
2430        local EPATCH_SOURCE="$1";
2431        local EPATCH_SUFFIX="${1##*\.}";
2432    else
2433        if [ -n "$1" -a -d "$1" ]; then
2434            if [ "${EPATCH_FORCE}" = "yes" ] && [ -z "${EPATCH_SUFFIX}" ]; then
2435                local EPATCH_SOURCE="$1/*";
2436            else
2437                local EPATCH_SOURCE="$1/*.${EPATCH_SUFFIX}";
2438            fi;
2439        else
2440            if [[ ! -d ${EPATCH_SOURCE} ]] || [[ -n $1 ]]; then
2441                if [ -n "$1" -a "${EPATCH_SOURCE}" = "${WORKDIR}/patch" ]; then
2442                    EPATCH_SOURCE="$1";
2443                fi;
2444                echo;
2445                eerror "Cannot find \$EPATCH_SOURCE!  Value for \$EPATCH_SOURCE is:";
2446                eerror;
2447                eerror "  ${EPATCH_SOURCE}";
2448                eerror "  ( ${EPATCH_SOURCE##*/} )";
2449                echo;
2450                die "Cannot find \$EPATCH_SOURCE!";
2451            fi;
2452            local EPATCH_SOURCE="${EPATCH_SOURCE}/*.${EPATCH_SUFFIX}";
2453        fi;
2454    fi;
2455    case ${EPATCH_SUFFIX##*\.} in
2456        xz)
2457            PIPE_CMD="xz -dc";
2458            PATCH_SUFFIX="xz"
2459        ;;
2460        lzma)
2461            PIPE_CMD="lzma -dc";
2462            PATCH_SUFFIX="lzma"
2463        ;;
2464        bz2)
2465            PIPE_CMD="bzip2 -dc";
2466            PATCH_SUFFIX="bz2"
2467        ;;
2468        gz | Z | z)
2469            PIPE_CMD="gzip -dc";
2470            PATCH_SUFFIX="gz"
2471        ;;
2472        ZIP | zip)
2473            PIPE_CMD="unzip -p";
2474            PATCH_SUFFIX="zip"
2475        ;;
2476        *)
2477            PIPE_CMD="cat";
2478            PATCH_SUFFIX="patch"
2479        ;;
2480    esac;
2481    if [ "${SINGLE_PATCH}" = "no" ]; then
2482        einfo "${EPATCH_MULTI_MSG}";
2483    fi;
2484    for x in ${EPATCH_SOURCE};
2485    do
2486        if [ -f ${x} ] && ( [ "${SINGLE_PATCH}" = "yes" -o "${x/_all_}" != "${x}" -o "${x/_${ARCH}_}" != "${x}" ] || [ "${EPATCH_FORCE}" = "yes" ] ); then
2487            local count=0;
2488            local popts="${EPATCH_OPTS}";
2489            local patchname=${x##*/};
2490            if [ -n "${EPATCH_EXCLUDE}" ]; then
2491                if [ "${EPATCH_EXCLUDE/${patchname}}" != "${EPATCH_EXCLUDE}" ]; then
2492                    continue;
2493                fi;
2494            fi;
2495            if [ "${SINGLE_PATCH}" = "yes" ]; then
2496                if [ -n "${EPATCH_SINGLE_MSG}" ]; then
2497                    einfo "${EPATCH_SINGLE_MSG}";
2498                else
2499                    einfo "Applying ${patchname} ...";
2500                fi;
2501            else
2502                einfo "  ${patchname} ...";
2503            fi;
2504            echo "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2505            echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2506            if [[ ${PATCH_SUFFIX} != "patch" ]]; then
2507                echo -n "PIPE_COMMAND:  " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2508                echo "${PIPE_CMD} ${x} > ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2509                if ! ( ${PIPE_CMD} ${x} > ${PATCH_TARGET} ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then
2510                    echo;
2511                    eerror "Could not extract patch!";
2512                    count=5;
2513                    break;
2514                fi;
2515            else
2516                PATCH_TARGET="${x}";
2517            fi;
2518            local abs_paths=$(egrep -n '^[-+]{3} /' "${PATCH_TARGET}" | awk '$2 != "/dev/null" { print }');
2519            if [[ -n ${abs_paths} ]]; then
2520                count=1;
2521                echo "NOTE: skipping -p0 due to absolute paths in patch:" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2522                echo "${abs_paths}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2523            fi;
2524            while [ "${count}" -lt 5 ]; do
2525                _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2526                echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2527                echo -n "PATCH COMMAND:  " >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2528                echo "patch -p${count} ${popts} < ${PATCH_TARGET}" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2529                echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2530                _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2531                if ( cat ${PATCH_TARGET} | patch -p${count} ${popts} --dry-run -f;
2532                _epatch_assert ) >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/} 2>&1; then
2533                    _epatch_draw_line "***** ${patchname} *****" > ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
2534                    echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
2535                    echo "ACTUALLY APPLYING ${patchname} ..." >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
2536                    echo >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
2537                    _epatch_draw_line "***** ${patchname} *****" >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
2538                    cat ${PATCH_TARGET} | patch -p${count} ${popts} >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real 2>&1;
2539                    _epatch_assert;
2540                    if [ "$?" -ne 0 ]; then
2541                        cat ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real >> ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2542                        echo;
2543                        eerror "A dry-run of patch command succeeded, but actually";
2544                        eerror "applying the patch failed!";
2545                        count=5;
2546                    fi;
2547                    rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}.real;
2548                    break;
2549                fi;
2550                count=$((count + 1));
2551            done;
2552            if [ "${PATCH_SUFFIX}" != "patch" ]; then
2553                rm -f ${PATCH_TARGET};
2554            fi;
2555            if [ "${count}" -eq 5 ]; then
2556                echo;
2557                eerror "Failed Patch: ${patchname} !";
2558                eerror " ( ${PATCH_TARGET} )";
2559                eerror;
2560                eerror "Include in your bugreport the contents of:";
2561                eerror;
2562                eerror "  ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/}";
2563                echo;
2564                die "Failed Patch: ${patchname}!";
2565            fi;
2566            rm -f ${STDERR_TARGET%/*}/${patchname}-${STDERR_TARGET##*/};
2567            eend 0;
2568        fi;
2569    done;
2570    if [ "${SINGLE_PATCH}" = "no" ]; then
2571        einfo "Done with patching";
2572    fi
2573}
2574epause ()
2575{
2576    [[ -z ${EPAUSE_IGNORE} ]] && sleep ${1:-5}
2577}
2578epunt_cxx ()
2579{
2580    local dir=$1;
2581    [[ -z ${dir} ]] && dir=${S};
2582    ebegin "Removing useless C++ checks";
2583    local f;
2584    find "${dir}" -name configure | while read f; do
2585        patch --no-backup-if-mismatch -p0 "${f}" "${PORTDIR}/eclass/ELT-patches/nocxx/nocxx.patch" > /dev/null;
2586    done;
2587    eend 0
2588}
2589esvn_clean ()
2590{
2591    [[ -z $* ]] && set -- .;
2592    find "$@" -type d -name '.svn' -prune -print0 | xargs -0 rm -rf
2593}
2594filter-flags ()
2595{
2596    _filter-hardened "$@";
2597    _filter-var CFLAGS "$@";
2598    _filter-var CPPFLAGS "$@";
2599    _filter-var CXXFLAGS "$@";
2600    _filter-var FFLAGS "$@";
2601    _filter-var FCFLAGS "$@";
2602    return 0
2603}
2604filter-ldflags ()
2605{
2606    _filter-var LDFLAGS "$@";
2607    return 0
2608}
2609filter-lfs-flags ()
2610{
2611    [[ -n $@ ]] && die "filter-lfs-flags takes no arguments";
2612    filter-flags -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
2613}
2614filter-mfpmath ()
2615{
2616    local orig_mfpmath new_math prune_math;
2617    orig_mfpmath=$(get-flag -mfpmath);
2618    new_math=$(get-flag mfpmath);
2619    new_math=" ${new_math//,/ } ";
2620    prune_math="";
2621    for prune_math in "$@";
2622    do
2623        new_math=${new_math/ ${prune_math} / };
2624    done;
2625    new_math=$(echo ${new_math});
2626    new_math=${new_math// /,};
2627    if [[ -z ${new_math} ]]; then
2628        filter-flags ${orig_mfpmath};
2629    else
2630        replace-flags ${orig_mfpmath} -mfpmath=${new_math};
2631    fi;
2632    return 0
2633}
2634find_unpackable_file ()
2635{
2636    local src=$1;
2637    if [[ -z ${src} ]]; then
2638        src=${DISTDIR}/${A};
2639    else
2640        if [[ -e ${DISTDIR}/${src} ]]; then
2641            src=${DISTDIR}/${src};
2642        else
2643            if [[ -e ${PWD}/${src} ]]; then
2644                src=${PWD}/${src};
2645            else
2646                if [[ -e ${src} ]]; then
2647                    src=${src};
2648                fi;
2649            fi;
2650        fi;
2651    fi;
2652    [[ ! -e ${src} ]] && return 1;
2653    echo "${src}"
2654}
2655fixlocalpod ()
2656{
2657    find "${D}" -type f -name perllocal.pod -delete;
2658    find "${D}" -depth -mindepth 1 -type d -empty -delete
2659}
2660gcc-fullversion ()
2661{
2662    $(tc-getCC "$@") -dumpversion
2663}
2664gcc-major-version ()
2665{
2666    gcc-version "$@" | cut -f1 -d.
2667}
2668gcc-micro-version ()
2669{
2670    gcc-fullversion "$@" | cut -f3 -d. | cut -f1 -d-
2671}
2672gcc-minor-version ()
2673{
2674    gcc-version "$@" | cut -f2 -d.
2675}
2676gcc-specs-directive ()
2677{
2678    local directive subdname subdirective;
2679    directive="$(_gcc-specs-directive_raw $1)";
2680    while [[ ${directive} == *%\(*\)* ]]; do
2681        subdname=${directive/*%\(};
2682        subdname=${subdname/\)*};
2683        subdirective="$(_gcc-specs-directive_raw ${subdname})";
2684        directive="${directive//\%(${subdname})/${subdirective}}";
2685    done;
2686    echo "${directive}";
2687    return 0
2688}
2689gcc-specs-nostrict ()
2690{
2691    local directive;
2692    directive=$(gcc-specs-directive cc1);
2693    return $([[ "${directive/\{!fstrict-overflow:}" != "${directive}" ]])
2694}
2695gcc-specs-now ()
2696{
2697    local directive;
2698    directive=$(gcc-specs-directive link_command);
2699    return $([[ "${directive/\{!nonow:}" != "${directive}" ]])
2700}
2701gcc-specs-pie ()
2702{
2703    local directive;
2704    directive=$(gcc-specs-directive cc1);
2705    return $([[ "${directive/\{!nopie:}" != "${directive}" ]])
2706}
2707gcc-specs-relro ()
2708{
2709    local directive;
2710    directive=$(gcc-specs-directive link_command);
2711    return $([[ "${directive/\{!norelro:}" != "${directive}" ]])
2712}
2713gcc-specs-ssp ()
2714{
2715    local directive;
2716    directive=$(gcc-specs-directive cc1);
2717    return $([[ "${directive/\{!fno-stack-protector:}" != "${directive}" ]])
2718}
2719gcc-specs-ssp-to-all ()
2720{
2721    local directive;
2722    directive=$(gcc-specs-directive cc1);
2723    return $([[ "${directive/\{!fno-stack-protector-all:}" != "${directive}" ]])
2724}
2725gcc-version ()
2726{
2727    gcc-fullversion "$@" | cut -f1,2 -d.
2728}
2729gen_usr_ldscript ()
2730{
2731    local lib libdir=$(get_libdir) output_format="" auto=false suffix=$(get_libname);
2732    [[ -z ${ED+set} ]] && local ED=${D%/}${EPREFIX}/;
2733    tc-is-static-only && return;
2734    dodir /usr/${libdir};
2735    if [[ $1 == "-a" ]]; then
2736        auto=true;
2737        shift;
2738        dodir /${libdir};
2739    fi;
2740    output_format=$($(tc-getCC) ${CFLAGS} ${LDFLAGS} -Wl,--verbose 2>&1 | sed -n 's/^OUTPUT_FORMAT("\([^"]*\)",.*/\1/p');
2741    [[ -n ${output_format} ]] && output_format="OUTPUT_FORMAT ( ${output_format} )";
2742    for lib in "$@";
2743    do
2744        local tlib;
2745        if ${auto}; then
2746            lib="lib${lib}${suffix}";
2747        else
2748            [[ -r ${ED}/${libdir}/${lib} ]] || continue;
2749        fi;
2750        case ${CTARGET:-${CHOST}} in
2751            *-darwin*)
2752                if ${auto}; then
2753                    tlib=$(scanmacho -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
2754                else
2755                    tlib=$(scanmacho -qF'%S#F' "${ED}"/${libdir}/${lib});
2756                fi;
2757                [[ -z ${tlib} ]] && die "unable to read install_name from ${lib}";
2758                tlib=${tlib##*/};
2759                if ${auto}; then
2760                    mv "${ED}"/usr/${libdir}/${lib%${suffix}}.*${suffix#.} "${ED}"/${libdir}/ || die;
2761                    rm -f "${ED}"/${libdir}/${lib};
2762                fi;
2763                install_name_tool -id "${EPREFIX}"/${libdir}/${tlib} "${ED}"/${libdir}/${tlib};
2764                pushd "${ED}/usr/${libdir}" > /dev/null;
2765                ln -snf "../../${libdir}/${tlib}" "${lib}";
2766                popd > /dev/null
2767            ;;
2768            *-aix* | *-irix* | *-hpux* | *-interix* | *-winnt*)
2769                if ${auto}; then
2770                    mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
2771                    tlib=$(readlink "${ED}"/${libdir}/${lib});
2772                    tlib=${tlib##*/};
2773                    if [[ -z ${tlib} ]]; then
2774                        tlib=${lib};
2775                    else
2776                        rm -f "${ED}"/${libdir}/${lib};
2777                    fi;
2778                else
2779                    tlib=${lib};
2780                fi;
2781                pushd "${ED}/usr/${libdir}" > /dev/null;
2782                ln -snf "../../${libdir}/${tlib}" "${lib}";
2783                popd > /dev/null
2784            ;;
2785            *)
2786                if ${auto}; then
2787                    tlib=$(scanelf -qF'%S#F' "${ED}"/usr/${libdir}/${lib});
2788                    [[ -z ${tlib} ]] && die "unable to read SONAME from ${lib}";
2789                    mv "${ED}"/usr/${libdir}/${lib}* "${ED}"/${libdir}/ || die;
2790                    if [[ ${tlib} != ${lib}* ]]; then
2791                        mv "${ED}"/usr/${libdir}/${tlib}* "${ED}"/${libdir}/ || die;
2792                    fi;
2793                    rm -f "${ED}"/${libdir}/${lib};
2794                else
2795                    tlib=${lib};
2796                fi;
2797                cat > "${ED}/usr/${libdir}/${lib}"  <<-END_LDSCRIPT
2798/* GNU ld script
2799   Since Gentoo has critical dynamic libraries in /lib, and the static versions
2800   in /usr/lib, we need to have a "fake" dynamic lib in /usr/lib, otherwise we
2801   run into linking problems.  This "fake" dynamic lib is a linker script that
2802   redirects the linker to the real lib.  And yes, this works in the cross-
2803   compiling scenario as the sysroot-ed linker will prepend the real path.
2804
2805   See bug http://bugs.gentoo.org/4411 for more info.
2806 */
2807${output_format}
2808GROUP ( ${EPREFIX}/${libdir}/${tlib} )
2809END_LDSCRIPT
2810
2811            ;;
2812        esac
2813        fperms a+x "/usr/${libdir}/${lib}" || die "could not change perms on ${lib}";
2814    done
2815}
2816get-flag ()
2817{
2818    local f findflag="$1";
2819    for f in ${CFLAGS} ${CXXFLAGS} ${FFLAGS} ${FCFLAGS};
2820    do
2821        if [ "${f/${findflag}}" != "${f}" ]; then
2822            printf "%s\n" "${f/-${findflag}=}";
2823            return 0;
2824        fi;
2825    done;
2826    return 1
2827}
2828get_abi_ASFLAGS ()
2829{
2830    get_abi_var ASFLAGS "$@"
2831}
2832get_abi_CDEFINE ()
2833{
2834    get_abi_var CDEFINE "$@"
2835}
2836get_abi_CFLAGS ()
2837{
2838    get_abi_var CFLAGS "$@"
2839}
2840get_abi_CHOST ()
2841{
2842    get_abi_var CHOST "$@"
2843}
2844get_abi_CTARGET ()
2845{
2846    get_abi_var CTARGET "$@"
2847}
2848get_abi_FAKE_TARGETS ()
2849{
2850    get_abi_var FAKE_TARGETS "$@"
2851}
2852get_abi_LDFLAGS ()
2853{
2854    get_abi_var LDFLAGS "$@"
2855}
2856get_abi_LIBDIR ()
2857{
2858    get_abi_var LIBDIR "$@"
2859}
2860get_abi_var ()
2861{
2862    local flag=$1;
2863    local abi;
2864    if [ $# -gt 1 ]; then
2865        abi=${2};
2866    else
2867        if [ -n "${ABI}" ]; then
2868            abi=${ABI};
2869        else
2870            if [ -n "${DEFAULT_ABI}" ]; then
2871                abi=${DEFAULT_ABI};
2872            else
2873                abi="default";
2874            fi;
2875        fi;
2876    fi;
2877    local var="${flag}_${abi}";
2878    echo ${!var}
2879}
2880get_after_major_version ()
2881{
2882    __versionator_shopt_toggle on;
2883    echo $(get_version_component_range 2- "${1:-${PV}}" );
2884    __versionator_shopt_toggle off
2885}
2886get_all_abis ()
2887{
2888    local order="";
2889    if [[ -z ${MULTILIB_ABIS} ]]; then
2890        echo "default";
2891        return 0;
2892    fi;
2893    for x in ${MULTILIB_ABIS};
2894    do
2895        if [[ ${x} != ${DEFAULT_ABI} ]]; then
2896            order="${order:+${order} }${x}";
2897        fi;
2898    done;
2899    order="${order:+${order} }${DEFAULT_ABI}";
2900    echo ${order};
2901    return 0
2902}
2903get_all_libdirs ()
2904{
2905    local libdirs="lib";
2906    local abi;
2907    local dir;
2908    for abi in ${MULTILIB_ABIS};
2909    do
2910        [ "$(get_abi_LIBDIR ${abi})" != "lib" ] && libdirs="${libdirs} $(get_abi_LIBDIR ${abi})";
2911    done;
2912    echo "${libdirs}"
2913}
2914get_all_version_components ()
2915{
2916    __versionator_shopt_toggle on;
2917    local ver_str=${1:-${PV}} result result_idx=0;
2918    result=();
2919    if [[ "${VERSIONATOR_CACHE_VER_STR}" == "${ver_str}" ]]; then
2920        echo ${VERSIONATOR_CACHE_RESULT};
2921        __versionator_shopt_toggle off;
2922        return;
2923    fi;
2924    export VERSIONATOR_CACHE_VER_STR="${ver_str}";
2925    while [[ -n "$ver_str" ]]; do
2926        case "${ver_str:0:1}" in
2927            [[:digit:]])
2928                result[$result_idx]="${ver_str%%[^[:digit:]]*}";
2929                ver_str="${ver_str##+([[:digit:]])}";
2930                result_idx=$(($result_idx + 1))
2931            ;;
2932            [-_.])
2933                result[$result_idx]="${ver_str:0:1}";
2934                ver_str="${ver_str:1}";
2935                result_idx=$(($result_idx + 1))
2936            ;;
2937            [[:alpha:]])
2938                local not_match="${ver_str##+([[:alpha:]])*([[:digit:]])}";
2939                result[$result_idx]=${ver_str:0:$((${#ver_str} - ${#not_match}))};
2940                ver_str="${not_match}";
2941                result_idx=$(($result_idx + 1))
2942            ;;
2943            *)
2944                result[$result_idx]="${ver_str:0:1}";
2945                ver_str="${ver_str:1}";
2946                result_idx=$(($result_idx + 1))
2947            ;;
2948        esac;
2949    done;
2950    export VERSIONATOR_CACHE_RESULT="${result[@]}";
2951    echo ${result[@]};
2952    __versionator_shopt_toggle off
2953}
2954get_bmake ()
2955{
2956    if [[ ${USERLAND} == *BSD ]]; then
2957        echo make;
2958    else
2959        if [[ ${USERLAND} == "Darwin" ]]; then
2960            echo bsdmake;
2961        else
2962            echo pmake;
2963        fi;
2964    fi
2965}
2966get_install_abis ()
2967{
2968    local order="";
2969    if [[ -z ${MULTILIB_ABIS} ]]; then
2970        echo "default";
2971        return 0;
2972    fi;
2973    if [[ ${EMULTILIB_PKG} == "true" ]]; then
2974        for x in ${MULTILIB_ABIS};
2975        do
2976            if [[ ${x} != "${DEFAULT_ABI}" ]]; then
2977                hasq ${x} ${ABI_DENY} || ordera="${ordera} ${x}";
2978            fi;
2979        done;
2980        hasq ${DEFAULT_ABI} ${ABI_DENY} || order="${ordera} ${DEFAULT_ABI}";
2981        if [[ -n ${ABI_ALLOW} ]]; then
2982            local ordera="";
2983            for x in ${order};
2984            do
2985                if hasq ${x} ${ABI_ALLOW}; then
2986                    ordera="${ordera} ${x}";
2987                fi;
2988            done;
2989            order=${ordera};
2990        fi;
2991    else
2992        order=${DEFAULT_ABI};
2993    fi;
2994    if [[ -z ${order} ]]; then
2995        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.";
2996    fi;
2997    echo ${order};
2998    return 0
2999}
3000get_last_version_component_index ()
3001{
3002    __versionator_shopt_toggle on;
3003    echo $(( $(get_version_component_count "${1:-${PV}}" ) - 1 ));
3004    __versionator_shopt_toggle off
3005}
3006get_libdir ()
3007{
3008    local CONF_LIBDIR;
3009    if [ -n "${CONF_LIBDIR_OVERRIDE}" ]; then
3010        echo ${CONF_LIBDIR_OVERRIDE};
3011    else
3012        get_abi_LIBDIR;
3013    fi
3014}
3015get_libdir_override ()
3016{
3017    if has_multilib_profile; then
3018        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";
3019        exit 1;
3020    fi;
3021    CONF_LIBDIR="$1";
3022    CONF_LIBDIR_OVERRIDE="$1";
3023    LIBDIR_default="$1"
3024}
3025get_libname ()
3026{
3027    local libname;
3028    local ver=$1;
3029    case ${CHOST} in
3030        *-cygwin | mingw* | *-mingw*)
3031            libname="dll"
3032        ;;
3033        *-darwin*)
3034            libname="dylib"
3035        ;;
3036        *-aix*)
3037            libname="a"
3038        ;;
3039        *-mint*)
3040            libname="irrelevant"
3041        ;;
3042        *)
3043            libname="so"
3044        ;;
3045    esac;
3046    if [[ -z $* ]]; then
3047        echo ".${libname}";
3048    else
3049        for ver in "$@";
3050        do
3051            case ${CHOST} in
3052                *-darwin*)
3053                    echo ".${ver}.${libname}"
3054                ;;
3055                *-aix*)
3056                    echo ".${libname}"
3057                ;;
3058                *-mint*)
3059                    echo ".${libname}"
3060                ;;
3061                *)
3062                    echo ".${libname}.${ver}"
3063                ;;
3064            esac;
3065        done;
3066    fi
3067}
3068get_major_version ()
3069{
3070    __versionator_shopt_toggle on;
3071    local c;
3072    c=($(get_all_version_components "${1:-${PV}}" ));
3073    echo ${c[0]};
3074    __versionator_shopt_toggle off
3075}
3076get_ml_incdir ()
3077{
3078    local dir=/usr/include;
3079    if [[ $# -gt 0 ]]; then
3080        incdir=$1;
3081        shift;
3082    fi;
3083    if [[ -z "${MULTILIB_ABIS}" ]]; then
3084        echo ${incdir};
3085        return 0;
3086    fi;
3087    local abi=${ABI-${DEFAULT_ABI}};
3088    if [[ $# -gt 0 ]]; then
3089        abi=$1;
3090        shift;
3091    fi;
3092    if [[ -d "${dir}/gentoo-multilib/${abi}" ]]; then
3093        echo ${dir}/gentoo-multilib/${abi};
3094    else
3095        echo ${dir};
3096    fi
3097}
3098get_mounts ()
3099{
3100    local point= node= fs= opts= foo=;
3101    if [[ $(uname -s) == "Linux" ]]; then
3102        while read node point fs opts foo; do
3103            echo "${point} ${node} ${fs} ${opts}";
3104        done < /proc/mounts;
3105        return;
3106    fi;
3107    local IFS=' ';
3108    LC_ALL=C mount -p | while read node point fs foo; do
3109        opts=${fs#* };
3110        fs=${fs%% *};
3111        echo "${point// /\040} ${node// /\040} ${fs%% *} ${opts// /\040}";
3112    done
3113}
3114get_multilibdir ()
3115{
3116    if has_multilib_profile; then
3117        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";
3118        exit 1;
3119    fi;
3120    echo ${CONF_MULTILIBDIR:=lib32}
3121}
3122get_version_component_count ()
3123{
3124    __versionator_shopt_toggle on;
3125    local a;
3126    a=($(get_version_components "${1:-${PV}}" ));
3127    echo ${#a[@]};
3128    __versionator_shopt_toggle off
3129}
3130get_version_component_range ()
3131{
3132    __versionator_shopt_toggle on;
3133    local c v="${2:-${PV}}" range="${1}" range_start range_end i=-1 j=0;
3134    c=($(get_all_version_components ${v} ));
3135    range_start="${range%-*}";
3136    range_start="${range_start:-1}";
3137    range_end="${range#*-}";
3138    range_end="${range_end:-${#c[@]}}";
3139    while (( j < ${range_start} )); do
3140        i=$(($i + 1));
3141        [[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return;
3142        [[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1));
3143    done;
3144    while (( j <= ${range_end} )); do
3145        echo -n ${c[$i]};
3146        [[ $i -gt ${#c[@]} ]] && __versionator_shopt_toggle off && return;
3147        [[ -n "${c[${i}]//[-._]}" ]] && j=$(($j + 1));
3148        i=$(($i + 1));
3149    done;
3150    __versionator_shopt_toggle off
3151}
3152get_version_components ()
3153{
3154    __versionator_shopt_toggle on;
3155    local c="$(get_all_version_components "${1:-${PV}}")";
3156    c=(${c[@]//[-._]/ });
3157    echo ${c[@]};
3158    __versionator_shopt_toggle off
3159}
3160has_apache ()
3161{
3162    debug-print-function $FUNCNAME $*;
3163    if has_version '>=www-servers/apache-2'; then
3164        _init_apache2;
3165    else
3166        _init_no_apache;
3167    fi
3168}
3169has_apache_threads ()
3170{
3171    debug-print-function $FUNCNAME $*;
3172    if ! built_with_use www-servers/apache threads; then
3173        return;
3174    fi;
3175    local myflag="${1:-threads}";
3176    if ! use ${myflag}; then
3177        echo;
3178        eerror "You need to enable USE flag '${myflag}' to build a thread-safe version";
3179        eerror "of ${CATEGORY}/${PN} for use with www-servers/apache";
3180        die "Need missing USE flag '${myflag}'";
3181    fi
3182}
3183has_apache_threads_in ()
3184{
3185    debug-print-function $FUNCNAME $*;
3186    if ! built_with_use www-servers/apache threads; then
3187        return;
3188    fi;
3189    local myforeign="$1";
3190    local myflag="${2:-threads}";
3191    if ! built_with_use ${myforeign} ${myflag}; then
3192        echo;
3193        eerror "You need to enable USE flag '${myflag}' in ${myforeign} to";
3194        eerror "build a thread-safe version of ${CATEGORY}/${PN} for use";
3195        eerror "with www-servers/apache";
3196        die "Need missing USE flag '${myflag}' in ${myforeign}";
3197    fi
3198}
3199has_hardened ()
3200{
3201    ewarn "has_hardened: deprecated, please use gcc-specs-{relro,now}()!" 1>&2;
3202    test_version_info Hardened && return 0;
3203    [[ -f ${GCC_SPECS} && ${GCC_SPECS} != ${GCC_SPECS/hardened/} ]]
3204}
3205has_m32 ()
3206{
3207    [ "$(tc-arch)" = "amd64" ] && has_multilib_profile && return 0;
3208    local temp=$(emktemp);
3209    echo "int main() { return(0); }" > "${temp}".c;
3210    MY_CC=$(tc-getCC);
3211    ${MY_CC/ .*/} -m32 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
3212    local ret=$?;
3213    rm -f "${temp}".c;
3214    [[ ${ret} != 1 ]] && return 0;
3215    return 1
3216}
3217has_m64 ()
3218{
3219    local temp="$(emktemp)";
3220    echo "int main() { return(0); }" > "${temp}".c;
3221    MY_CC=$(tc-getCC);
3222    ${MY_CC/ .*/} -m64 -o "$(emktemp)" "${temp}".c > /dev/null 2>&1;
3223    local ret=$?;
3224    rm -f "${temp}".c;
3225    [[ ${ret} != 1 ]] && return 0;
3226    return 1
3227}
3228has_multilib_profile ()
3229{
3230    [ -n "${MULTILIB_ABIS}" -a "${MULTILIB_ABIS}" != "${MULTILIB_ABIS/ /}" ]
3231}
3232has_pic ()
3233{
3234    ewarn "has_pic: deprecated, please use gcc-specs-pie()!" 1>&2;
3235    [[ ${CFLAGS/-fPIC} != ${CFLAGS} || ${CFLAGS/-fpic} != ${CFLAGS} ]] || gcc-specs-pie
3236}
3237has_pie ()
3238{
3239    ewarn "has_pie: deprecated, please use gcc-specs-pie()!" 1>&2;
3240    [[ ${CFLAGS/-fPIE} != ${CFLAGS} || ${CFLAGS/-fpie} != ${CFLAGS} ]] || gcc-specs-pie
3241}
3242has_ssp ()
3243{
3244    ewarn "has_ssp: deprecated, please use gcc-specs-ssp()!" 1>&2;
3245    [[ ${CFLAGS/-fstack-protector} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP__) ]] || gcc-specs-ssp
3246}
3247has_ssp_all ()
3248{
3249    ewarn "has_ssp_all: deprecated, please use gcc-specs-ssp()!" 1>&2;
3250    [[ ${CFLAGS/-fstack-protector-all} != ${CFLAGS} || -n $(echo | $(tc-getCC) ${CFLAGS} -E -dM - | grep __SSP_ALL__) ]] || gcc-specs-ssp-to-all
3251}
3252increment-qa-violations ()
3253{
3254    let "JAVA_PKG_QA_VIOLATIONS+=1";
3255    export JAVA_PKG_QA_VIOLATIONS
3256}
3257initialize_tests_environment ()
3258{
3259    [[ "$1" == "local" ]] && base_url="file://${S}/subversion/tests/cmdline" http_library="";
3260    [[ "$1" == "svn" ]] && base_url="svn://127.0.0.1" http_library="";
3261    [[ "$1" == "neon" ]] && base_url="http://127.0.0.1" http_library="neon";
3262    [[ "$1" == "serf" ]] && base_url="http://127.0.0.1" http_library="serf";
3263    [[ "$1" == "svn" ]] && LC_ALL="C" subversion/svnserve/svnserve -dr "subversion/tests/cmdline" --listen-port "${SVN_TEST_SVNSERVE_PORT}" --pid-file "${T}/svnserve.pid";
3264    [[ -n "${SVN_TEST_FSFS_MEMCACHED}" ]] && memcached -dp "${SVN_TEST_FSFS_MEMCACHED_PORT}" -P "${T}/memcached.pid"
3265}
3266is-flag ()
3267{
3268    is-flagq "$@" && echo true
3269}
3270is-flagq ()
3271{
3272    [[ -n $2 ]] && die "Usage: is-flag <flag>";
3273    _is_flagq CFLAGS $1 || _is_flagq CXXFLAGS $1 || _is_flagq FFLAGS $1 || _is_flagq FCFLAGS $1
3274}
3275is-java-strict ()
3276{
3277    [[ -n ${JAVA_PKG_STRICT} ]];
3278    return $?
3279}
3280is-ldflag ()
3281{
3282    is-ldflagq "$@" && echo true
3283}
3284is-ldflagq ()
3285{
3286    [[ -n $2 ]] && die "Usage: is-ldflag <flag>";
3287    _is_flagq LDFLAGS $1
3288}
3289is-login-disabled ()
3290{
3291    shell=$(egetshell "$1");
3292    case ${shell} in
3293        /bin/false | /usr/bin/false | /sbin/nologin | /usr/sbin/nologin)
3294            return 0
3295        ;;
3296        *)
3297            return 1
3298        ;;
3299    esac
3300}
3301is_final_abi ()
3302{
3303    has_multilib_profile || return 0;
3304    local ALL_ABIS=$(get_install_abis);
3305    local LAST_ABI=${ALL_ABIS/* /};
3306    [[ ${LAST_ABI} == ${ABI} ]]
3307}
3308java-pkg-opt-2_pkg_preinst ()
3309{
3310    use ${JAVA_PKG_OPT_USE} && java-utils-2_pkg_preinst
3311}
3312java-pkg-opt-2_pkg_setup ()
3313{
3314    use ${JAVA_PKG_OPT_USE} && java-pkg_init
3315}
3316java-pkg-opt-2_src_prepare ()
3317{
3318    use ${JAVA_PKG_OPT_USE} && java-utils-2_src_prepare
3319}
3320java-pkg_addcp ()
3321{
3322    java-pkg_append_ JAVA_PKG_CLASSPATH "${@}";
3323    java-pkg_do_write_
3324}
3325java-pkg_announce-qa-violation ()
3326{
3327    local nodie;
3328    if [[ ${1} == "--nodie" ]]; then
3329        nodie="true";
3330        shift;
3331    fi;
3332    echo "Java QA Notice: $@" 1>&2;
3333    increment-qa-violations;
3334    [[ -z "${nodie}" ]] && is-java-strict && die "${@}"
3335}
3336java-pkg_ant-tasks-depend ()
3337{
3338    debug-print-function ${FUNCNAME} ${WANT_ANT_TASKS};
3339    if [[ -n "${WANT_ANT_TASKS}" ]]; then
3340        local DEP="";
3341        for i in ${WANT_ANT_TASKS};
3342        do
3343            if [[ ${i} = ant-* ]]; then
3344                DEP="${DEP}dev-java/${i} ";
3345            else
3346                if [[ ${i} = */*:* ]]; then
3347                    DEP="${DEP}${i} ";
3348                else
3349                    echo "Invalid atom in WANT_ANT_TASKS: ${i}";
3350                    return 1;
3351                fi;
3352            fi;
3353        done;
3354        echo ${DEP};
3355        return 0;
3356    else
3357        return 0;
3358    fi
3359}
3360java-pkg_append_ ()
3361{
3362    debug-print-function ${FUNCNAME} $*;
3363    local var="${1}" value="${2}";
3364    if [[ -z "${!var}" ]]; then
3365        export ${var}="${value}";
3366    else
3367        local oldIFS=${IFS} cur haveit;
3368        IFS=':';
3369        for cur in ${!var};
3370        do
3371            if [[ ${cur} == ${value} ]]; then
3372                haveit="yes";
3373                break;
3374            fi;
3375        done;
3376        [[ -z ${haveit} ]] && export ${var}="${!var}:${value}";
3377        IFS=${oldIFS};
3378    fi
3379}
3380java-pkg_check-jikes ()
3381{
3382    if hasq jikes ${IUSE}; then
3383        java-pkg_announce-qa-violation "deprecated USE flag 'jikes' in IUSE";
3384    fi
3385}
3386java-pkg_check-phase ()
3387{
3388    local phase=${1};
3389    local funcname=${FUNCNAME[1]};
3390    if [[ ${EBUILD_PHASE} != ${phase} ]]; then
3391        local msg="${funcname} used outside of src_${phase}";
3392        java-pkg_announce-qa-violation "${msg}";
3393    fi
3394}
3395java-pkg_check-versioned-jar ()
3396{
3397    local jar=${1};
3398    if [[ ${jar} =~ ${PV} ]]; then
3399        java-pkg_announce-qa-violation "installing versioned jar '${jar}'";
3400    fi
3401}
3402java-pkg_current-vm-matches ()
3403{
3404    hasq $(java-pkg_get-current-vm) ${@};
3405    return $?
3406}
3407java-pkg_die ()
3408{
3409    echo "!!! When you file a bug report, please include the following information:" 1>&2;
3410    echo "GENTOO_VM=${GENTOO_VM}  CLASSPATH=\"${CLASSPATH}\" JAVA_HOME=\"${JAVA_HOME}\"" 1>&2;
3411    echo "JAVACFLAGS=\"${JAVACFLAGS}\" COMPILER=\"${GENTOO_COMPILER}\"" 1>&2;
3412    echo "and of course, the output of emerge --info" 1>&2
3413}
3414java-pkg_do_write_ ()
3415{
3416    debug-print-function ${FUNCNAME} $*;
3417    java-pkg_init_paths_;
3418    dodir "${JAVA_PKG_SHAREPATH}";
3419    if [[ -n "${JAVA_PKG_CLASSPATH}" || -n "${JAVA_PKG_LIBRARY}" || -f "${JAVA_PKG_DEPEND_FILE}" || -f "${JAVA_PKG_OPTIONAL_DEPEND_FILE}" ]]; then
3420        ( echo "DESCRIPTION=\"${DESCRIPTION}\"";
3421        echo "GENERATION=\"2\"";
3422        echo "SLOT=\"${SLOT}\"";
3423        echo "CATEGORY=\"${CATEGORY}\"";
3424        echo "PVR=\"${PVR}\"";
3425        [[ -n "${JAVA_PKG_CLASSPATH}" ]] && echo "CLASSPATH=\"${JAVA_PKG_CLASSPATH}\"";
3426        [[ -n "${JAVA_PKG_LIBRARY}" ]] && echo "LIBRARY_PATH=\"${JAVA_PKG_LIBRARY}\"";
3427        [[ -n "${JAVA_PROVIDE}" ]] && echo "PROVIDES=\"${JAVA_PROVIDE}\"";
3428        [[ -f "${JAVA_PKG_DEPEND_FILE}" ]] && echo "DEPEND=\"$(cat "${JAVA_PKG_DEPEND_FILE}" | uniq | tr '\n' ':')\"";
3429        [[ -f "${JAVA_PKG_OPTIONAL_DEPEND_FILE}" ]] && echo "OPTIONAL_DEPEND=\"$(cat "${JAVA_PKG_OPTIONAL_DEPEND_FILE}" | uniq | tr '\n' ':')\"";
3430        echo "VM=\"$(echo ${RDEPEND} ${DEPEND} | sed -e 's/ /\n/g' | sed -n -e '/virtual\/\(jre\|jdk\)/ { p;q }')\"";
3431        [[ -f "${JAVA_PKG_BUILD_DEPEND_FILE}" ]] && echo "BUILD_DEPEND=\"$(cat "${JAVA_PKG_BUILD_DEPEND_FILE}" | uniq | tr '\n' ':')\"" ) > "${JAVA_PKG_ENV}";
3432        local target="$(java-pkg_get-target)";
3433        local source="$(java-pkg_get-source)";
3434        [[ -n ${target} ]] && echo "TARGET=\"${target}\"" >> "${JAVA_PKG_ENV}";
3435        [[ -n ${source} ]] && echo "SOURCE=\"${source}\"" >> "${JAVA_PKG_ENV}";
3436        [[ -n ${JAVADOC_PATH} ]] && echo "JAVADOC_PATH=\"${JAVADOC_PATH}\"" >> ${JAVA_PKG_ENV};
3437        [[ -n ${JAVA_SOURCES} ]] && echo "JAVA_SOURCES=\"${JAVA_SOURCES}\"" >> ${JAVA_PKG_ENV};
3438        echo "MERGE_VM=\"${GENTOO_VM}\"" >> "${JAVA_PKG_ENV}";
3439        [[ -n ${GENTOO_COMPILER} ]] && echo "MERGE_COMPILER=\"${GENTOO_COMPILER}\"" >> "${JAVA_PKG_ENV}";
3440        if [[ -n "${JAVA_PKG_EXTRA_ENV_VARS}" ]]; then
3441            cat "${JAVA_PKG_EXTRA_ENV}" >> "${JAVA_PKG_ENV}" || die;
3442            echo "ENV_VARS=\"$(echo ${JAVA_PKG_EXTRA_ENV_VARS})\"" >> "${JAVA_PKG_ENV}" || die;
3443        fi;
3444        sed -e "s/=\":/=\"/" -e "s/:\"$/\"/" -i "${JAVA_PKG_ENV}" || die "Did you forget to call java_init ?";
3445    else
3446        debug-print "JAVA_PKG_CLASSPATH, JAVA_PKG_LIBRARY, JAVA_PKG_DEPEND_FILE";
3447        debug-print "or JAVA_PKG_OPTIONAL_DEPEND_FILE not defined so can't";
3448        debug-print "write package.env.";
3449    fi
3450}
3451java-pkg_doexamples ()
3452{
3453    debug-print-function ${FUNCNAME} $*;
3454    [[ ${#} -lt 1 ]] && die "At least one argument needed";
3455    java-pkg_check-phase install;
3456    local dest=/usr/share/doc/${PF}/examples;
3457    if [[ ${1} == --subdir ]]; then
3458        local dest=${dest}/${2};
3459        dodir ${dest};
3460        shift 2;
3461    fi;
3462    if [[ ${#} = 1 && -d ${1} ]]; then
3463        ( insinto "${dest}";
3464        doins -r ${1}/* ) || die "Installing examples failed";
3465    else
3466        ( insinto "${dest}";
3467        doins -r "$@" ) || die "Installing examples failed";
3468    fi
3469}
3470java-pkg_dohtml ()
3471{
3472    debug-print-function ${FUNCNAME} $*;
3473    [[ ${#} -lt 1 ]] && die "At least one argument required for ${FUNCNAME}";
3474    dohtml -f package-list "$@";
3475    java-pkg_recordjavadoc
3476}
3477java-pkg_dojar ()
3478{
3479    debug-print-function ${FUNCNAME} $*;
3480    [[ ${#} -lt 1 ]] && die "At least one argument needed";
3481    java-pkg_check-phase install;
3482    java-pkg_init_paths_;
3483    dodir ${JAVA_PKG_JARDEST};
3484    local jar;
3485    for jar in "${@}";
3486    do
3487        local jar_basename=$(basename "${jar}");
3488        java-pkg_check-versioned-jar ${jar_basename};
3489        if [[ -e "${jar}" ]]; then
3490            local dest="${D}${JAVA_PKG_JARDEST}/${jar_basename}";
3491            if [[ -e "${dest}" ]]; then
3492                ewarn "Overwriting ${dest}";
3493            fi;
3494            if [[ ! -L "${jar}" ]]; then
3495                is-java-strict && java-pkg_verify-classes "${jar}";
3496                INSDESTTREE="${JAVA_PKG_JARDEST}" doins "${jar}" || die "failed to install ${jar}";
3497                java-pkg_append_ JAVA_PKG_CLASSPATH "${JAVA_PKG_JARDEST}/${jar_basename}";
3498                debug-print "installed ${jar} to ${D}${JAVA_PKG_JARDEST}";
3499            else
3500                ln -s "$(readlink "${jar}")" "${D}${JAVA_PKG_JARDEST}/${jar_basename}";
3501                debug-print "${jar} is a symlink, linking accordingly";
3502            fi;
3503        else
3504            die "${jar} does not exist";
3505        fi;
3506    done;
3507    java-pkg_do_write_
3508}
3509java-pkg_dojavadoc ()
3510{
3511    debug-print-function ${FUNCNAME} $*;
3512    local symlink;
3513    if [[ ${1} = --symlink ]]; then
3514        symlink=${2};
3515        shift 2;
3516    fi;
3517    local dir="$1";
3518    local dest=/usr/share/doc/${PF}/html;
3519    java-pkg_check-phase install;
3520    [[ -z "${dir}" ]] && die "Must specify a directory!";
3521    [[ ! -d "${dir}" ]] && die "${dir} does not exist, or isn't a directory!";
3522    if [[ ! -e "${dir}/index.html" ]]; then
3523        local msg="No index.html in javadoc directory";
3524        ewarn "${msg}";
3525        is-java-strict && die "${msg}";
3526    fi;
3527    if [[ -e ${D}/${dest}/api ]]; then
3528        eerror "${dest} already exists. Will not overwrite.";
3529        die "${dest}";
3530    fi;
3531    local dir_to_install="${dir}";
3532    if [[ "$(basename "${dir}")" != "api" ]]; then
3533        dir_to_install="${T}/api";
3534        cp -r "${dir}" "${dir_to_install}" || die "cp failed";
3535    fi;
3536    java-pkg_dohtml -r "${dir_to_install}";
3537    dosym ${dest}/api "${JAVA_PKG_SHAREPATH}/api" || die;
3538    if [[ -n ${symlink} ]]; then
3539        debug-print "symlinking ${dest}/{api,${symlink}}";
3540        dosym ${dest}/{api,${symlink}} || die;
3541    fi
3542}
3543java-pkg_dolauncher ()
3544{
3545    debug-print-function ${FUNCNAME} $*;
3546    java-pkg_check-phase install;
3547    java-pkg_init_paths_;
3548    if [[ ${#} = 0 ]]; then
3549        local name="${PN}";
3550    else
3551        local name="${1}";
3552        shift;
3553    fi;
3554    local target="${T}/${name}";
3555    local var_tmp="${T}/launcher_variables_tmp";
3556    local target_dir pre;
3557    while [[ -n "${1}" && -n "${2}" ]]; do
3558        local var="${1}" value="${2}";
3559        if [[ "${var:0:2}" == "--" ]]; then
3560            local var=${var:2};
3561            echo "gjl_${var}=\"${value}\"" >> "${var_tmp}";
3562            local gjl_${var}="${value}";
3563        else
3564            if [[ "${var}" == "-into" ]]; then
3565                target_dir="${value}";
3566            else
3567                if [[ "${var}" == "-pre" ]]; then
3568                    pre="${value}";
3569                fi;
3570            fi;
3571        fi;
3572        shift 2;
3573    done;
3574    if [[ -z "${gjl_jar}" && -z "${gjl_main}" ]]; then
3575        local cp="${JAVA_PKG_CLASSPATH}";
3576        if [[ "${cp/:}" = "${cp}" && "${cp%.jar}" != "${cp}" ]]; then
3577            echo "gjl_jar=\"${JAVA_PKG_CLASSPATH}\"" >> "${var_tmp}";
3578        else
3579            local msg="Not enough information to create a launcher given.";
3580            msg="${msg} Please give --jar or --main argument to ${FUNCNAME}.";
3581            die "${msg}";
3582        fi;
3583    fi;
3584    echo "#!/bin/bash" > "${target}";
3585    if [[ -n "${pre}" ]]; then
3586        if [[ -f "${pre}" ]]; then
3587            cat "${pre}" >> "${target}";
3588        else
3589            die "-pre specified file '${pre}' does not exist";
3590        fi;
3591    fi;
3592    echo "gjl_package=${JAVA_PKG_NAME}" >> "${target}";
3593    cat "${var_tmp}" >> "${target}";
3594    rm -f "${var_tmp}";
3595    echo "source /usr/share/java-config-2/launcher/launcher.bash" >> "${target}";
3596    if [[ -n "${target_dir}" ]]; then
3597        DESTTREE="${target_dir}" dobin "${target}";
3598        local ret=$?;
3599        return ${ret};
3600    else
3601        dobin "${target}";
3602    fi
3603}
3604java-pkg_doso ()
3605{
3606    debug-print-function ${FUNCNAME} $*;
3607    java-pkg_check-phase install;
3608    [[ ${#} -lt 1 ]] && die "${FUNCNAME} requires at least one argument";
3609    java-pkg_init_paths_;
3610    local lib;
3611    for lib in "$@";
3612    do
3613        if [[ -e "${lib}" ]]; then
3614            if [[ ! -L "${lib}" ]]; then
3615                INSDESTTREE="${JAVA_PKG_LIBDEST}" INSOPTIONS="${LIBOPTIONS}" doins "${lib}" || die "failed to install ${lib}";
3616                java-pkg_append_ JAVA_PKG_LIBRARY "${JAVA_PKG_LIBDEST}";
3617                debug-print "Installing ${lib} to ${JAVA_PKG_LIBDEST}";
3618            else
3619                dosym "$(readlink "${lib}")" "${JAVA_PKG_LIBDEST}/${lib##*/}";
3620                debug-print "${lib} is a symlink, linking accordantly";
3621            fi;
3622        else
3623            die "${lib} does not exist";
3624        fi;
3625    done;
3626    java-pkg_do_write_
3627}
3628java-pkg_dosrc ()
3629{
3630    debug-print-function ${FUNCNAME} $*;
3631    [ ${#} -lt 1 ] && die "At least one argument needed";
3632    java-pkg_check-phase install;
3633    [[ ${#} -lt 1 ]] && die "At least one argument needed";
3634    if ! [[ ${DEPEND} = *app-arch/zip* ]]; then
3635        local msg="${FUNCNAME} called without app-arch/zip in DEPEND";
3636        java-pkg_announce-qa-violation ${msg};
3637    fi;
3638    java-pkg_init_paths_;
3639    local zip_name="${PN}-src.zip";
3640    local zip_path="${T}/${zip_name}";
3641    local dir;
3642    for dir in "${@}";
3643    do
3644        local dir_parent=$(dirname "${dir}");
3645        local dir_name=$(basename "${dir}");
3646        pushd ${dir_parent} > /dev/null || die "problem entering ${dir_parent}";
3647        zip -q -r ${zip_path} ${dir_name} -i '*.java';
3648        local result=$?;
3649        if [[ ${result} != 12 && ${result} != 0 ]]; then
3650            die "failed to zip ${dir_name}";
3651        fi;
3652        popd > /dev/null;
3653    done;
3654    INSDESTTREE=${JAVA_PKG_SOURCESPATH} doins ${zip_path} || die "Failed to install source";
3655    JAVA_SOURCES="${JAVA_PKG_SOURCESPATH}/${zip_name}";
3656    java-pkg_do_write_
3657}
3658java-pkg_dowar ()
3659{
3660    debug-print-function ${FUNCNAME} $*;
3661    [[ ${#} -lt 1 ]] && die "At least one argument needed";
3662    java-pkg_check-phase install;
3663    java-pkg_init_paths_;
3664    local war;
3665    for war in $*;
3666    do
3667        local warpath;
3668        if [[ -L "${war}" ]]; then
3669            cp "${war}" "${T}";
3670            warpath="${T}$(basename "${war}")";
3671        else
3672            if [[ -d "${war}" ]]; then
3673                echo "dowar: warning, skipping directory ${war}";
3674                continue;
3675            else
3676                warpath="${war}";
3677            fi;
3678        fi;
3679        INSOPTIONS="-m 0644" INSDESTTREE=${JAVA_PKG_WARDEST} doins ${warpath};
3680    done
3681}
3682java-pkg_ensure-dep ()
3683{
3684    debug-print-function ${FUNCNAME} $*;
3685    local limit_to="${1}";
3686    local target_pkg="${2}";
3687    local dev_error="";
3688    local stripped_pkg=$(echo "${target_pkg}" | sed             's/-[0-9]*\(\.[0-9]\)*$//');
3689    debug-print "Matching against: ${stripped_pkg}";
3690    if [[ ${limit_to} != runtime && ! ( "${DEPEND}" =~ "$stripped_pkg" ) ]]; then
3691        dev_error="The ebuild is attempting to use ${target_pkg} that is not";
3692        dev_error="${dev_error} declared in DEPEND.";
3693        if is-java-strict; then
3694            eerror "${dev_error}";
3695            die "${dev_error}";
3696        else
3697            if [[ ${BASH_SUBSHELL} = 0 ]]; then
3698                eerror "${dev_error}";
3699                elog "Because you have this package installed the package will";
3700                elog "build without problems, but please report this to";
3701                elog "http://bugs.gentoo.org";
3702            fi;
3703        fi;
3704    fi;
3705    if [[ ${limit_to} != build ]]; then
3706        if [[ ! ( ${RDEPEND} =~ "${stripped_pkg}" ) ]]; then
3707            if [[ ! ( ${PDEPEND} =~ "${stripped_pkg}" ) ]]; then
3708                dev_error="The ebuild is attempting to use ${target_pkg},";
3709                dev_error="${dev_error} without specifying --build-only, that is not declared in RDEPEND";
3710                dev_error="${dev_error} or PDEPEND.";
3711                if is-java-strict; then
3712                    eerror "${dev_error}";
3713                    die "${dev_error}";
3714                else
3715                    if [[ ${BASH_SUBSHELL} = 0 ]]; then
3716                        eerror "${dev_error}";
3717                        elog "The package will build without problems, but may fail to run";
3718                        elog "if you don't have ${target_pkg} installed, so please report";
3719                        elog "this to http://bugs.gentoo.org";
3720                    fi;
3721                fi;
3722            fi;
3723        fi;
3724    fi
3725}
3726java-pkg_ensure-gcj ()
3727{
3728    if ! built_with_use sys-devel/gcc gcj; then
3729        ewarn;
3730        ewarn "You must build gcc with the gcj support to build with gcj";
3731        ewarn;
3732        ebeep 5;
3733        die "No GCJ support found!";
3734    fi
3735}
3736java-pkg_ensure-no-bundled-jars ()
3737{
3738    debug-print-function ${FUNCNAME} $*;
3739    local bundled_jars=$(java-pkg_find-normal-jars);
3740    if [[ -n ${bundled_jars} ]]; then
3741        echo "Bundled jars found:";
3742        local jar;
3743        for jar in ${bundled_jars};
3744        do
3745            echo $(pwd)${jar/./};
3746        done;
3747        die "Bundled jars found!";
3748    fi
3749}
3750java-pkg_ensure-test ()
3751{
3752    if hasq test ${FEATURES} && ! hasq -test ${FEATURES} && hasq test ${IUSE} && ! use test; then
3753        eerror "You specified FEATURES=test, but USE=test is needed";
3754        eerror "to pull in the additional dependencies for testing";
3755        die "Need USE=test enabled";
3756    fi
3757}
3758java-pkg_ensure-vm-version-eq ()
3759{
3760    debug-print-function ${FUNCNAME} $*;
3761    if ! java-pkg_is-vm-version-eq $@; then
3762        debug-print "VM is not suffient";
3763        eerror "This package requires a Java VM version = $@";
3764        einfo "Please use java-config -S to set the correct one";
3765        die "Active Java VM too old";
3766    fi
3767}
3768java-pkg_ensure-vm-version-ge ()
3769{
3770    debug-print-function ${FUNCNAME} $*;
3771    if ! java-pkg_is-vm-version-ge "$@"; then
3772        debug-print "vm is not suffient";
3773        eerror "This package requires a Java VM version >= $@";
3774        einfo "Please use java-config -S to set the correct one";
3775        die "Active Java VM too old";
3776    fi
3777}
3778java-pkg_ensure-vm-version-sufficient ()
3779{
3780    debug-print-function ${FUNCNAME} $*;
3781    if ! java-pkg_is-vm-version-sufficient; then
3782        debug-print "VM is not suffient";
3783        eerror "Current Java VM cannot build this package";
3784        einfo "Please use java-config -S to set the correct one";
3785        die "Active Java VM cannot build this package";
3786    fi
3787}
3788java-pkg_expand_dir_ ()
3789{
3790    pushd "$(dirname "${1}")" > /dev/null 2>&1;
3791    pwd;
3792    popd > /dev/null 2>&1
3793}
3794java-pkg_filter-compiler ()
3795{
3796    JAVA_PKG_FILTER_COMPILER="${JAVA_PKG_FILTER_COMPILER} $@"
3797}
3798java-pkg_find-normal-jars ()
3799{
3800    local dir=$1;
3801    [[ -n "${dir}" ]] || dir="${WORKDIR}";
3802    local found;
3803    for jar in $(find "${dir}" -name "*.jar" -type f);
3804    do
3805        echo "${jar}";
3806        found="true";
3807    done;
3808    [[ -n "${found}" ]];
3809    return $?
3810}
3811java-pkg_force-compiler ()
3812{
3813    JAVA_PKG_FORCE_COMPILER="$@"
3814}
3815java-pkg_func-exists ()
3816{
3817    declare -F ${1} > /dev/null
3818}
3819java-pkg_get-current-vm ()
3820{
3821    java-config -f
3822}
3823java-pkg_get-javac ()
3824{
3825    debug-print-function ${FUNCNAME} $*;
3826    local compiler="${GENTOO_COMPILER}";
3827    local compiler_executable;
3828    if [[ "${compiler}" = "javac" ]]; then
3829        compiler_executable="javac";
3830    else
3831        local compiler_env="/usr/share/java-config-2/compiler/${compiler}";
3832        if [[ -f ${compiler_env} ]]; then
3833            local old_javac=${JAVAC};
3834            unset JAVAC;
3835            compiler_executable="$(source ${compiler_env} 1>/dev/null 2>&1; echo ${JAVAC})";
3836            export JAVAC=${old_javac};
3837            if [[ -z ${compiler_executable} ]]; then
3838                echo "JAVAC is empty or undefined in ${compiler_env}";
3839                return 1;
3840            fi;
3841            if [[ ! -x ${compiler_executable} ]]; then
3842                echo "${compiler_executable} doesn't exist, or isn't executable";
3843                return 1;
3844            fi;
3845        else
3846            echo "Could not find environment file for ${compiler}";
3847            return 1;
3848        fi;
3849    fi;
3850    echo ${compiler_executable}
3851}
3852java-pkg_get-jni-cflags ()
3853{
3854    local flags="-I${JAVA_HOME}/include";
3855    local platform="linux";
3856    use elibc_FreeBSD && platform="freebsd";
3857    flags="${flags} -I${JAVA_HOME}/include/${platform}";
3858    echo ${flags}
3859}
3860java-pkg_get-source ()
3861{
3862    echo ${JAVA_PKG_WANT_SOURCE:-$(depend-java-query --get-lowest "${DEPEND} ${RDEPEND}")}
3863}
3864java-pkg_get-target ()
3865{
3866    echo ${JAVA_PKG_WANT_TARGET:-$(depend-java-query --get-lowest "${DEPEND} ${RDEPEND}")}
3867}
3868java-pkg_get-vm-vendor ()
3869{
3870    debug-print-function ${FUNCNAME} $*;
3871    local vm="$(java-pkg_get-current-vm)";
3872    vm="${vm/-*/}";
3873    echo "${vm}"
3874}
3875java-pkg_get-vm-version ()
3876{
3877    debug-print-function ${FUNCNAME} $*;
3878    java-config -g PROVIDES_VERSION
3879}
3880java-pkg_getjar ()
3881{
3882    debug-print-function ${FUNCNAME} $*;
3883    local build_only="";
3884    local virtual="";
3885    local record_jar="";
3886    [[ "${EBUILD_PHASE}" == "test" ]] && build_only="build";
3887    while [[ "${1}" == --* ]]; do
3888        if [[ "${1}" = "--build-only" ]]; then
3889            build_only="build";
3890        else
3891            if [[ "${1}" == "--virtual" ]]; then
3892                virtual="true";
3893            else
3894                die "java-pkg_getjar called with unknown parameter: ${1}";
3895            fi;
3896        fi;
3897        shift;
3898    done;
3899    [[ ${#} -ne 2 ]] && die "${FUNCNAME} takes only two arguments besides --*";
3900    local pkg="${1}" target_jar="${2}" jar;
3901    if [[ "${EAPI}" == "1" ]]; then
3902        pkg="${pkg//:/-}";
3903    fi;
3904    [[ -z ${pkg} ]] && die "Must specify package to get a jar from";
3905    [[ -z ${target_jar} ]] && die "Must specify jar to get";
3906    local error_msg="Could not find classpath for ${pkg}. Are you sure its installed?";
3907    local classpath;
3908    classpath=$(java-config --classpath=${pkg});
3909    [[ $? != 0 ]] && die ${error_msg};
3910    java-pkg_ensure-dep "${build_only}" "${pkg}";
3911    if [[ -n "${virtual}" ]]; then
3912        if [[ -z "${build_only}" ]]; then
3913            java-pkg_record-jar_ "${pkg}";
3914        else
3915            java-pkg_record-jar_ --build-only "${pkg}";
3916        fi;
3917        record_jar="true";
3918    fi;
3919    for jar in ${classpath//:/ };
3920    do
3921        if [[ ! -f "${jar}" ]]; then
3922            die "Installation problem with jar ${jar} in ${pkg} - is it installed?";
3923        fi;
3924        if [[ "$(basename ${jar})" == "${target_jar}" ]]; then
3925            if [[ -z "${record_jar}" ]]; then
3926                if [[ -z "${build_only}" ]]; then
3927                    java-pkg_record-jar_ "${pkg}" "${jar}";
3928                else
3929                    java-pkg_record-jar_ --build-only "${pkg}" "${jar}";
3930                fi;
3931            fi;
3932            echo "${jar}";
3933            return 0;
3934        fi;
3935    done;
3936    die "Could not find ${target_jar} in ${pkg}";
3937    return 1
3938}
3939java-pkg_getjars ()
3940{
3941    debug-print-function ${FUNCNAME} $*;
3942    local build_only="";
3943    local deep="";
3944    [[ "${EBUILD_PHASE}" == "test" ]] && build_only="build";
3945    while [[ "${1}" == --* ]]; do
3946        if [[ "${1}" = "--build-only" ]]; then
3947            build_only="build";
3948        else
3949            if [[ "${1}" = "--with-dependencies" ]]; then
3950                deep="--with-dependencies";
3951            else
3952                die "java-pkg_jar-from called with unknown parameter: ${1}";
3953            fi;
3954        fi;
3955        shift;
3956    done;
3957    [[ ${#} -ne 1 ]] && die "${FUNCNAME} takes only one argument besides --*";
3958    local pkgs="${1}";
3959    if [[ "${EAPI}" == "1" ]]; then
3960        pkgs="${pkgs//:/-}";
3961    fi;
3962    jars="$(java-config ${deep} --classpath=${pkgs})";
3963    [[ $? != 0 ]] && die "java-config --classpath=${pkgs} failed";
3964    debug-print "${pkgs}:${jars}";
3965    for pkg in ${pkgs//,/ };
3966    do
3967        java-pkg_ensure-dep "${build_only}" "${pkg}";
3968    done;
3969    for pkg in ${pkgs//,/ };
3970    do
3971        if [[ -z "${build_only}" ]]; then
3972            java-pkg_record-jar_ "${pkg}";
3973        else
3974            java-pkg_record-jar_ --build-only "${pkg}";
3975        fi;
3976    done;
3977    echo "${jars}"
3978}
3979java-pkg_init ()
3980{
3981    debug-print-function ${FUNCNAME} $*;
3982    unset JAVAC;
3983    unset JAVA_HOME;
3984    java-config --help > /dev/null || {
3985        eerror "";
3986        eerror "Can't run java-config --help";
3987        eerror "Have you upgraded python recently but haven't";
3988        eerror "run python-updater yet?";
3989        die "Can't run java-config --help"
3990    };
3991    local silence="${SILENCE_JAVA_OPTIONS_WARNING}";
3992    local accept="${I_WANT_GLOBAL_JAVA_OPTIONS}";
3993    if [[ -n ${_JAVA_OPTIONS} && -z ${accept} && -z ${silence} ]]; then
3994        ewarn "_JAVA_OPTIONS changes what java -version outputs at least for";
3995        ewarn "sun-jdk vms and and as such break configure scripts that";
3996        ewarn "use it (for example app-office/openoffice) so we filter it out.";
3997        ewarn "Use SILENCE_JAVA_OPTIONS_WARNING=true in the environment (use";
3998        ewarn "make.conf for example) to silence this warning or";
3999        ewarn "I_WANT_GLOBAL_JAVA_OPTIONS to not filter it.";
4000    fi;
4001    if [[ -z ${accept} ]]; then
4002        unset _JAVA_OPTIONS;
4003        I_WANT_GLOBAL_JAVA_OPTIONS="true";
4004    fi;
4005    if java-pkg_func-exists ant_src_unpack; then
4006        java-pkg_announce-qa-violation "Using old ant_src_unpack. Should be src_unpack";
4007    fi;
4008    java-pkg_init_paths_;
4009    java-pkg_switch-vm;
4010    PATH=${JAVA_HOME}/bin:${PATH};
4011    java-pkg_check-jikes;
4012    export CLASSPATH=;
4013    export ANT_TASKS=;
4014    export ANT_OPTS=;
4015    export ANT_RESPECT_JAVA_HOME=
4016}
4017java-pkg_init-compiler_ ()
4018{
4019    debug-print-function ${FUNCNAME} $*;
4020    if [[ -n ${GENTOO_COMPILER} ]]; then
4021        debug-print "GENTOO_COMPILER already set";
4022        return;
4023    fi;
4024    local compilers;
4025    if [[ -z ${JAVA_PKG_FORCE_COMPILER} ]]; then
4026        compilers="$(source ${JAVA_PKG_COMPILERS_CONF} 1>/dev/null 2>&1; echo   ${COMPILERS})";
4027    else
4028        compilers=${JAVA_PKG_FORCE_COMPILER};
4029    fi;
4030    debug-print "Read \"${compilers}\" from ${JAVA_PKG_COMPILERS_CONF}";
4031    local compiler;
4032    for compiler in ${compilers};
4033    do
4034        debug-print "Checking ${compiler}...";
4035        if [[ ${compiler} = "javac" ]]; then
4036            debug-print "Found javac... breaking";
4037            export GENTOO_COMPILER="javac";
4038            break;
4039        fi;
4040        if has ${compiler} ${JAVA_PKG_FILTER_COMPILER}; then
4041            if [[ -z ${JAVA_PKG_FORCE_COMPILER} ]]; then
4042                einfo "Filtering ${compiler}";
4043                continue;
4044            fi;
4045        fi;
4046        local compiler_env="${JAVA_PKG_COMPILER_DIR}/${compiler}";
4047        if [[ -f ${compiler_env} ]]; then
4048            local desired_target="$(java-pkg_get-target)";
4049            local desired_source="$(java-pkg_get-source)";
4050            local supported_target=$(source ${compiler_env} 1>/dev/null 2>&1; echo ${SUPPORTED_TARGET});
4051            if ! has ${desired_target} ${supported_target}; then
4052                ewarn "${compiler} does not support -target ${desired_target},  skipping";
4053                continue;
4054            fi;
4055            if version_is_at_least "${desired_soure}" "1.3"; then
4056                local supported_source=$(source ${compiler_env} 1>/dev/null 2>&1; echo ${SUPPORTED_SOURCE});
4057                if ! has ${desired_source} ${supported_source}; then
4058                    ewarn "${compiler} does not support -source ${desired_source}, skipping";
4059                    continue;
4060                fi;
4061            fi;
4062            export GENTOO_COMPILER="${compiler}";
4063            break;
4064        else
4065            ewarn "Could not find configuration for ${compiler}, skipping";
4066            ewarn "Perhaps it is not installed?";
4067            continue;
4068        fi;
4069    done;
4070    if [[ -z ${GENTOO_COMPILER} ]]; then
4071        if [[ -n ${compilers} ]]; then
4072            einfo "No suitable compiler found: defaulting to JDK default for compilation";
4073        else
4074            :;
4075        fi;
4076        if java-config -g GENTOO_COMPILER 2> /dev/null; then
4077            export GENTOO_COMPILER=$(java-config -g GENTOO_COMPILER);
4078        else
4079            export GENTOO_COMPILER=javac;
4080        fi;
4081    else
4082        einfo "Using ${GENTOO_COMPILER} for compilation";
4083    fi
4084}
4085java-pkg_init_paths_ ()
4086{
4087    debug-print-function ${FUNCNAME} $*;
4088    local pkg_name;
4089    if [[ "$SLOT" == "0" ]]; then
4090        JAVA_PKG_NAME="${PN}";
4091    else
4092        JAVA_PKG_NAME="${PN}-${SLOT}";
4093    fi;
4094    JAVA_PKG_SHAREPATH="${DESTTREE}/share/${JAVA_PKG_NAME}";
4095    JAVA_PKG_SOURCESPATH="${JAVA_PKG_SHAREPATH}/sources/";
4096    JAVA_PKG_ENV="${D}${JAVA_PKG_SHAREPATH}/package.env";
4097    JAVA_PKG_VIRTUALS_PATH="${DESTTREE}/share/java-config-2/virtuals";
4098    JAVA_PKG_VIRTUAL_PROVIDER="${D}/${JAVA_PKG_VIRTUALS_PATH}/${JAVA_PKG_NAME}";
4099    [[ -z "${JAVA_PKG_JARDEST}" ]] && JAVA_PKG_JARDEST="${JAVA_PKG_SHAREPATH}/lib";
4100    [[ -z "${JAVA_PKG_LIBDEST}" ]] && JAVA_PKG_LIBDEST="${DESTTREE}/$(get_libdir)/${JAVA_PKG_NAME}";
4101    [[ -z "${JAVA_PKG_WARDEST}" ]] && JAVA_PKG_WARDEST="${JAVA_PKG_SHAREPATH}/webapps";
4102    debug-print "JAVA_PKG_SHAREPATH: ${JAVA_PKG_SHAREPATH}";
4103    debug-print "JAVA_PKG_ENV: ${JAVA_PKG_ENV}";
4104    debug-print "JAVA_PKG_JARDEST: ${JAVA_PKG_JARDEST}";
4105    debug-print "JAVA_PKG_LIBDEST: ${JAVA_PKG_LIBDEST}";
4106    debug-print "JAVA_PKG_WARDEST: ${JAVA_PKG_WARDEST}"
4107}
4108java-pkg_is-vm-version-eq ()
4109{
4110    debug-print-function ${FUNCNAME} $*;
4111    local needed_version="$@";
4112    [[ -z "${needed_version}" ]] && die "need an argument";
4113    local vm_version="$(java-pkg_get-vm-version)";
4114    vm_version="$(get_version_component_range 1-2 "${vm_version}")";
4115    needed_version="$(get_version_component_range 1-2 "${needed_version}")";
4116    if [[ -z "${vm_version}" ]]; then
4117        debug-print "Could not get JDK version from DEPEND";
4118        return 1;
4119    else
4120        if [[ "${vm_version}" == "${needed_version}" ]]; then
4121            debug-print "Detected a JDK(${vm_version}) = ${needed_version}";
4122            return 0;
4123        else
4124            debug-print "Detected a JDK(${vm_version}) != ${needed_version}";
4125            return 1;
4126        fi;
4127    fi
4128}
4129java-pkg_is-vm-version-ge ()
4130{
4131    debug-print-function ${FUNCNAME} $*;
4132    local needed_version=$@;
4133    local vm_version=$(java-pkg_get-vm-version);
4134    if [[ -z "${vm_version}" ]]; then
4135        debug-print "Could not get JDK version from DEPEND";
4136        return 1;
4137    else
4138        if version_is_at_least "${needed_version}" "${vm_version}"; then
4139            debug-print "Detected a JDK(${vm_version}) >= ${needed_version}";
4140            return 0;
4141        else
4142            debug-print "Detected a JDK(${vm_version}) < ${needed_version}";
4143            return 1;
4144        fi;
4145    fi
4146}
4147java-pkg_is-vm-version-sufficient ()
4148{
4149    debug-print-function ${FUNCNAME} $*;
4150    depend-java-query --is-sufficient "${DEPEND}" > /dev/null;
4151    return $?
4152}
4153java-pkg_jar-from ()
4154{
4155    debug-print-function ${FUNCNAME} $*;
4156    local build_only="";
4157    local destdir=".";
4158    local deep="";
4159    local virtual="";
4160    local record_jar="";
4161    [[ "${EBUILD_PHASE}" == "test" ]] && build_only="build";
4162    while [[ "${1}" == --* ]]; do
4163        if [[ "${1}" = "--build-only" ]]; then
4164            build_only="build";
4165        else
4166            if [[ "${1}" = "--with-dependencies" ]]; then
4167                deep="--with-dependencies";
4168            else
4169                if [[ "${1}" = "--virtual" ]]; then
4170                    virtual="true";
4171                else
4172                    if [[ "${1}" = "--into" ]]; then
4173                        destdir="${2}";
4174                        shift;
4175                    else
4176                        die "java-pkg_jar-from called with unknown parameter: ${1}";
4177                    fi;
4178                fi;
4179            fi;
4180        fi;
4181        shift;
4182    done;
4183    local target_pkg="${1}" target_jar="${2}" destjar="${3}";
4184    [[ -z ${target_pkg} ]] && die "Must specify a package";
4185    if [[ "${EAPI}" == "1" ]]; then
4186        target_pkg="${target_pkg//:/-}";
4187    fi;
4188    [[ -z "${destjar}" ]] && destjar="${target_jar}";
4189    local error_msg="There was a problem getting the classpath for ${target_pkg}.";
4190    local classpath;
4191    classpath="$(java-config ${deep} --classpath=${target_pkg})";
4192    [[ $? != 0 ]] && die ${error_msg};
4193    if [[ ${target_pkg} = *,* ]]; then
4194        for pkg in ${target_pkg//,/ };
4195        do
4196            java-pkg_ensure-dep "${build_only}" "${pkg}";
4197            [[ -z "${build_only}" ]] && java-pkg_record-jar_ "${pkg}";
4198        done;
4199        record_jar="true";
4200    else
4201        java-pkg_ensure-dep "${build_only}" "${target_pkg}";
4202    fi;
4203    if [[ -z "${build_only}" && -n "${virtual}" ]]; then
4204        java-pkg_record-jar_ "${target_pkg}";
4205        record_jar="true";
4206    fi;
4207    pushd ${destdir} > /dev/null || die "failed to change directory to ${destdir}";
4208    local jar;
4209    for jar in ${classpath//:/ };
4210    do
4211        local jar_name=$(basename "${jar}");
4212        if [[ ! -f "${jar}" ]]; then
4213            debug-print "${jar} from ${target_pkg} does not exist";
4214            die "Installation problems with jars in ${target_pkg} - is it installed?";
4215        fi;
4216        if [[ -z "${target_jar}" ]]; then
4217            [[ -f "${target_jar}" ]] && rm "${target_jar}";
4218            ln -snf "${jar}" || die "Failed to make symlink from ${jar} to ${jar_name}";
4219            if [[ -z "${record_jar}" ]]; then
4220                if [[ -z "${build_only}" ]]; then
4221                    java-pkg_record-jar_ "${target_pkg}" "${jar}";
4222                else
4223                    java-pkg_record-jar_ --build-only "${target_pkg}" "${jar}";
4224                fi;
4225            fi;
4226        else
4227            if [[ "${jar_name}" == "${target_jar}" ]]; then
4228                [[ -f "${destjar}" ]] && rm "${destjar}";
4229                ln -snf "${jar}" "${destjar}" || die "Failed to make symlink from ${jar} to ${destjar}";
4230                if [[ -z "${record_jar}" ]]; then
4231                    if [[ -z "${build_only}" ]]; then
4232                        java-pkg_record-jar_ "${target_pkg}" "${jar}";
4233                    else
4234                        java-pkg_record-jar_ --build-only "${target_jar}" "${jar}";
4235                    fi;
4236                fi;
4237                popd > /dev/null;
4238                return 0;
4239            fi;
4240        fi;
4241    done;
4242    popd > /dev/null;
4243    if [[ -z "${target_jar}" ]]; then
4244        return 0;
4245    else
4246        die "Failed to find ${target_jar:-jar} in ${target_pkg}";
4247    fi
4248}
4249java-pkg_jar-list ()
4250{
4251    if [[ -n "${JAVA_PKG_DEBUG}" ]]; then
4252        einfo "Linked Jars";
4253        find "${S}" -type l -name '*.jar' -print0 | xargs -0 -r -n 500 ls -ald | sed -e "s,${WORKDIR},\${WORKDIR},";
4254        einfo "Jars";
4255        find "${S}" -type f -name '*.jar' -print0 | xargs -0 -r -n 500 ls -ald | sed -e "s,${WORKDIR},\${WORKDIR},";
4256        einfo "Classes";
4257        find "${S}" -type f -name '*.class' -print0 | xargs -0 -r -n 500 ls -ald | sed -e "s,${WORKDIR},\${WORKDIR},";
4258    fi
4259}
4260java-pkg_jarfrom ()
4261{
4262    java-pkg_jar-from "$@"
4263}
4264java-pkg_jarinto ()
4265{
4266    debug-print-function ${FUNCNAME} $*;
4267    JAVA_PKG_JARDEST="${1}"
4268}
4269java-pkg_javac-args ()
4270{
4271    debug-print-function ${FUNCNAME} $*;
4272    local want_source="$(java-pkg_get-source)";
4273    local want_target="$(java-pkg_get-target)";
4274    local source_str="-source ${want_source}";
4275    local target_str="-target ${want_target}";
4276    debug-print "want source: ${want_source}";
4277    debug-print "want target: ${want_target}";
4278    if [[ -z "${want_source}" || -z "${want_target}" ]]; then
4279        debug-print "could not find valid -source/-target values for javac";
4280        echo "Could not find valid -source/-target values for javac";
4281        return 1;
4282    else
4283        if java-pkg_is-vm-version-ge "1.4"; then
4284            echo "${source_str} ${target_str}";
4285        else
4286            echo "${target_str}";
4287        fi;
4288    fi
4289}
4290java-pkg_needs-vm ()
4291{
4292    debug-print-function ${FUNCNAME} $*;
4293    if [[ -n "$(echo ${DEPEND} | sed -e '\:virtual/jdk:!d')" ]]; then
4294        return 0;
4295    fi;
4296    return 1
4297}
4298java-pkg_newjar ()
4299{
4300    debug-print-function ${FUNCNAME} $*;
4301    local original_jar="${1}";
4302    local new_jar="${2:-${PN}.jar}";
4303    local new_jar_dest="${T}/${new_jar}";
4304    [[ -z ${original_jar} ]] && die "Must specify a jar to install";
4305    [[ ! -f ${original_jar} ]] && die "${original_jar} does not exist or is not a file!";
4306    rm -f "${new_jar_dest}" || die "Failed to remove ${new_jar_dest}";
4307    cp "${original_jar}" "${new_jar_dest}" || die "Failed to copy ${original_jar} to ${new_jar_dest}";
4308    java-pkg_dojar "${new_jar_dest}"
4309}
4310java-pkg_record-jar_ ()
4311{
4312    debug-print-function ${FUNCNAME} $*;
4313    local depend_file="${JAVA_PKG_DEPEND_FILE}";
4314    case "${1}" in
4315        "--optional")
4316            depend_file="${JAVA_PKG_OPTIONAL_DEPEND_FILE}";
4317            shift
4318        ;;
4319        "--build-only")
4320            depend_file="${JAVA_PKG_BUILD_DEPEND_FILE}";
4321            shift
4322        ;;
4323    esac;
4324    local pkg=${1} jar=${2} append;
4325    if [[ -z "${jar}" ]]; then
4326        append="${pkg}";
4327    else
4328        append="$(basename ${jar})@${pkg}";
4329    fi;
4330    echo "${append}" >> "${depend_file}"
4331}
4332java-pkg_recordjavadoc ()
4333{
4334    debug-print-function ${FUNCNAME} $*;
4335    JAVADOC_PATH="$(find ${D}/usr/share/doc/ -name allclasses-frame.html -printf '%h:')";
4336    JAVADOC_PATH="${JAVADOC_PATH//${D}}";
4337    if [[ -n "${JAVADOC_PATH}" ]]; then
4338        debug-print "javadocs found in ${JAVADOC_PATH%:}";
4339        java-pkg_do_write_;
4340    else
4341        debug-print "No javadocs found";
4342    fi
4343}
4344java-pkg_register-ant-task ()
4345{
4346    local TASKS_DIR="tasks";
4347    while [[ -n "${1}" && -n "${2}" ]]; do
4348        local var="${1#--}";
4349        local val="${2}";
4350        if [[ "${var}" == "version" ]]; then
4351            TASKS_DIR="tasks-${val}";
4352        else
4353            die "Unknown parameter passed to java-pkg_register-ant-tasks: ${1} ${2}";
4354        fi;
4355        shift 2;
4356    done;
4357    local TASK_NAME="${1:-${JAVA_PKG_NAME}}";
4358    dodir /usr/share/ant/${TASKS_DIR};
4359    touch "${D}/usr/share/ant/${TASKS_DIR}/${TASK_NAME}"
4360}
4361java-pkg_register-dependency ()
4362{
4363    debug-print-function ${FUNCNAME} $*;
4364    java-pkg_check-phase install;
4365    [[ ${#} -gt 2 ]] && die "${FUNCNAME} takes at most two arguments";
4366    local pkgs="${1}";
4367    local jar="${2}";
4368    [[ -z "${pkgs}" ]] && die "${FUNCNAME} called with no package(s) specified";
4369    if [[ "${EAPI}" == "1" ]]; then
4370        pkgs="${pkgs//:/-}";
4371    fi;
4372    if [[ -z "${jar}" ]]; then
4373        for pkg in ${pkgs//,/ };
4374        do
4375            java-pkg_ensure-dep runtime "${pkg}";
4376            java-pkg_record-jar_ "${pkg}";
4377        done;
4378    else
4379        [[ ${pkgs} == *,* ]] && die "${FUNCNAME} called with both package list and jar name";
4380        java-pkg_ensure-dep runtime "${pkgs}";
4381        java-pkg_record-jar_ "${pkgs}" "${jar}";
4382    fi;
4383    java-pkg_do_write_
4384}
4385java-pkg_register-environment-variable ()
4386{
4387    debug-print-function ${FUNCNAME} $*;
4388    java-pkg_check-phase install;
4389    [[ ${#} != 2 ]] && die "${FUNCNAME} takes two arguments";
4390    echo "${1}=\"${2}\"" >> ${JAVA_PKG_EXTRA_ENV};
4391    JAVA_PKG_EXTRA_ENV_VARS="${JAVA_PKG_EXTRA_ENV_VARS} ${1}";
4392    java-pkg_do_write_
4393}
4394java-pkg_register-optional-dependency ()
4395{
4396    debug-print-function ${FUNCNAME} $*;
4397    java-pkg_check-phase install;
4398    [[ ${#} -gt 2 ]] && die "${FUNCNAME} takes at most two arguments";
4399    local pkgs="${1}";
4400    local jar="${2}";
4401    [[ -z "${pkgs}" ]] && die "${FUNCNAME} called with no package(s) specified";
4402    if [[ "${EAPI}" == "1" ]]; then
4403        pkgs="${pkgs//:/-}";
4404    fi;
4405    if [[ -z "${jar}" ]]; then
4406        for pkg in ${pkgs//,/ };
4407        do
4408            java-pkg_record-jar_ --optional "${pkg}";
4409        done;
4410    else
4411        [[ ${pkgs} == *,* ]] && die "${FUNCNAME} called with both package list and jar name";
4412        java-pkg_record-jar_ --optional "${pkgs}" "${jar}";
4413    fi;
4414    java-pkg_do_write_
4415}
4416java-pkg_regjar ()
4417{
4418    debug-print-function ${FUNCNAME} $*;
4419    java-pkg_check-phase install;
4420    [[ ${#} -lt 1 ]] && die "at least one argument needed";
4421    java-pkg_init_paths_;
4422    local jar jar_dir jar_file;
4423    for jar in "${@}";
4424    do
4425        if [[ -e "${jar}" || -e "${D}${jar}" ]]; then
4426            [[ -d "${jar}" || -d "${D}${jar}" ]] && die "Called ${FUNCNAME} on a        directory $*";
4427            is-java-strict && java-pkg_verify-classes "${jar}";
4428            java-pkg_append_ JAVA_PKG_CLASSPATH "${jar#${D}}";
4429        else
4430            if [[ ${jar} = *\** ]]; then
4431                eerror "The argument ${jar} to ${FUNCNAME}";
4432                eerror "has * in it. If you want it to glob in";
4433                eerror '${D} add ${D} to the argument.';
4434            fi;
4435            debug-print "${jar} or ${D}${jar} not found";
4436            die "${jar} does not exist";
4437        fi;
4438    done;
4439    java-pkg_do_write_
4440}
4441java-pkg_regso ()
4442{
4443    debug-print-function ${FUNCNAME} $*;
4444    java-pkg_check-phase install;
4445    [[ ${#} -lt 1 ]] && die "${FUNCNAME} requires at least one argument";
4446    java-pkg_init_paths_;
4447    local lib target_dir;
4448    for lib in "$@";
4449    do
4450        if [[ -e "${lib}" ]]; then
4451            target_dir="$(java-pkg_expand_dir_ ${lib})";
4452            java-pkg_append_ JAVA_PKG_LIBRARY "/${target_dir#${D}}";
4453        else
4454            if [[ -e "${D}${lib}" ]]; then
4455                target_dir="$(java-pkg_expand_dir_ ${D}${lib})";
4456                java-pkg_append_ JAVA_PKG_LIBRARY "${target_dir}";
4457            else
4458                die "${lib} does not exist";
4459            fi;
4460        fi;
4461    done;
4462    java-pkg_do_write_
4463}
4464java-pkg_set-current-vm ()
4465{
4466    export GENTOO_VM=${1}
4467}
4468java-pkg_setup-vm ()
4469{
4470    debug-print-function ${FUNCNAME} $*;
4471    export LANG="C" LC_ALL="C";
4472    local vendor="$(java-pkg_get-vm-vendor)";
4473    if [[ "${vendor}" == "sun" ]] && java-pkg_is-vm-version-ge "1.5"; then
4474        addpredict "/dev/random";
4475    else
4476        if [[ "${vendor}" == "ibm" ]]; then
4477            addpredict "/proc/self/maps";
4478            addpredict "/proc/cpuinfo";
4479        else
4480            if [[ "${vendor}" == "jrockit" ]]; then
4481                addpredict "/proc/cpuinfo";
4482            fi;
4483        fi;
4484    fi
4485}
4486java-pkg_sointo ()
4487{
4488    debug-print-function ${FUNCNAME} $*;
4489    JAVA_PKG_LIBDEST="${1}"
4490}
4491java-pkg_switch-vm ()
4492{
4493    debug-print-function ${FUNCNAME} $*;
4494    if java-pkg_needs-vm; then
4495        if [[ -n "${JAVA_PKG_FORCE_VM}" ]]; then
4496            debug-print "JAVA_PKG_FORCE_VM used: ${JAVA_PKG_FORCE_VM}";
4497            export GENTOO_VM="${JAVA_PKG_FORCE_VM}";
4498        else
4499            if [[ "${JAVA_PKG_ALLOW_VM_CHANGE}" == "yes" ]]; then
4500                debug-print "depend-java-query:  NV_DEPEND:     ${JAVA_PKG_NV_DEPEND:-${DEPEND}}";
4501                GENTOO_VM="$(depend-java-query --get-vm "${JAVA_PKG_NV_DEPEND:-${DEPEND}}")";
4502                if [[ -z "${GENTOO_VM}" || "${GENTOO_VM}" == "None" ]]; then
4503                    eerror "Unable to determine VM for building from dependencies:";
4504                    echo "NV_DEPEND: ${JAVA_PKG_NV_DEPEND:-${DEPEND}}";
4505                    die "Failed to determine VM for building.";
4506                else
4507                    export GENTOO_VM;
4508                fi;
4509            else
4510                java-pkg_ensure-vm-version-sufficient;
4511            fi;
4512        fi;
4513        debug-print "Using: $(java-config -f)";
4514        java-pkg_setup-vm;
4515        export JAVA=$(java-config --java);
4516        export JAVAC=$(java-config --javac);
4517        JAVACFLAGS="$(java-pkg_javac-args)";
4518        if [[ ${?} != 0 ]]; then
4519            eerror "There was a problem determining JAVACFLAGS: ${JAVACFLAGS}";
4520            die "java-pkg_javac-args failed";
4521        fi;
4522        [[ -n ${JAVACFLAGS_EXTRA} ]] && JAVACFLAGS="${JAVACFLAGS_EXTRA} ${JAVACFLAGS}";
4523        export JAVACFLAGS;
4524        export JAVA_HOME="$(java-config -g JAVA_HOME)";
4525        export JDK_HOME=${JAVA_HOME};
4526        java-pkg_append_ LD_LIBRARY_PATH "$(java-config -g LDPATH)";
4527        local tann="${T}/announced-vm";
4528        if [[ -n "${JAVA_PKG_DEBUG}" ]] || [[ ! -f "${tann}" ]]; then
4529            einfo "Using: $(java-config -f)";
4530            [[ ! -f "${tann}" ]] && touch "${tann}";
4531        fi;
4532    else
4533        [[ -n "${JAVA_PKG_DEBUG}" ]] && ewarn "!!! This package inherits java-pkg but doesn't depend on a JDK. -bin or broken dependency!!!";
4534    fi
4535}
4536java-pkg_verify-classes ()
4537{
4538    local version_verify="/usr/bin/class-version-verify.py";
4539    if [[ ! -x "${version_verify}" ]]; then
4540        version_verify="/usr/$(get_libdir)/javatoolkit/bin/class-version-verify.py";
4541    fi;
4542    if [[ ! -x "${version_verify}" ]]; then
4543        ewarn "Unable to perform class version checks as";
4544        ewarn "class-version-verify.py is unavailable";
4545        ewarn "Please install dev-java/javatoolkit.";
4546        return;
4547    fi;
4548    local target=$(java-pkg_get-target);
4549    local result;
4550    local log="${T}/class-version-verify.log";
4551    if [[ -n "${1}" ]]; then
4552        ${version_verify} -v -t ${target} "${1}" > "${log}";
4553        result=$?;
4554    else
4555        ebegin "Verifying java class versions (target: ${target})";
4556        ${version_verify} -v -t ${target} -r "${D}" > "${log}";
4557        result=$?;
4558        eend ${result};
4559    fi;
4560    [[ -n ${JAVA_PKG_DEBUG} ]] && cat "${log}";
4561    if [[ ${result} != 0 ]]; then
4562        eerror "Incorrect bytecode version found";
4563        [[ -n "${1}" ]] && eerror "in file: ${1}";
4564        eerror "See ${log} for more details.";
4565        die "Incorrect bytecode found";
4566    fi
4567}
4568java-utils-2_pkg_preinst ()
4569{
4570    if is-java-strict; then
4571        if has_version dev-java/java-dep-check; then
4572            [[ -e "${JAVA_PKG_ENV}" ]] || return;
4573            local output=$(GENTOO_VM= java-dep-check --image "${D}" "${JAVA_PKG_ENV}");
4574            if [[ -n ${output} && has_version < =dev-java/java-dep-check-0.2 ]]; then
4575                ewarn "Possibly unneeded dependencies found in package.env:";
4576                for dep in ${output};
4577                do
4578                    ewarn "\t${dep}";
4579                done;
4580            fi;
4581            if [[ -n ${output} && has_version > dev-java/java-dep-check-0.2 ]]; then
4582                ewarn "${output}";
4583            fi;
4584        else
4585            eerror "Install dev-java/java-dep-check for dependency checking";
4586        fi;
4587    fi
4588}
4589java-utils-2_src_prepare ()
4590{
4591    [[ ${EBUILD_PHASE} == prepare ]] && java-pkg_func-exists java_prepare && java_prepare;
4592    if [[ ! -e "${T}/java-utils-2_src_prepare-run" ]] && is-java-strict; then
4593        echo "Searching for bundled jars:";
4594        java-pkg_find-normal-jars || echo "None found.";
4595        echo "Searching for bundled classes (no output if none found):";
4596        find "${WORKDIR}" -name "*.class";
4597        echo "Search done.";
4598    fi;
4599    touch "${T}/java-utils-2_src_prepare-run"
4600}
4601make_desktop_entry ()
4602{
4603    [[ -z $1 ]] && eerror "make_desktop_entry: You must specify the executable" && return 1;
4604    local exec=${1};
4605    local name=${2:-${PN}};
4606    local icon=${3:-${PN}};
4607    local type=${4};
4608    local path=${5};
4609    if [[ -z ${type} ]]; then
4610        local catmaj=${CATEGORY%%-*};
4611        local catmin=${CATEGORY##*-};
4612        case ${catmaj} in
4613            app)
4614                case ${catmin} in
4615                    accessibility)
4616                        type=Accessibility
4617                    ;;
4618                    admin)
4619                        type=System
4620                    ;;
4621                    antivirus)
4622                        type=System
4623                    ;;
4624                    arch)
4625                        type=Archiving
4626                    ;;
4627                    backup)
4628                        type=Archiving
4629                    ;;
4630                    cdr)
4631                        type=DiscBurning
4632                    ;;
4633                    dicts)
4634                        type=Dictionary
4635                    ;;
4636                    doc)
4637                        type=Documentation
4638                    ;;
4639                    editors)
4640                        type=TextEditor
4641                    ;;
4642                    emacs)
4643                        type=TextEditor
4644                    ;;
4645                    emulation)
4646                        type=Emulator
4647                    ;;
4648                    laptop)
4649                        type=HardwareSettings
4650                    ;;
4651                    office)
4652                        type=Office
4653                    ;;
4654                    pda)
4655                        type=PDA
4656                    ;;
4657                    vim)
4658                        type=TextEditor
4659                    ;;
4660                    xemacs)
4661                        type=TextEditor
4662                    ;;
4663                    *)
4664                        type=
4665                    ;;
4666                esac
4667            ;;
4668            dev)
4669                type="Development"
4670            ;;
4671            games)
4672                case ${catmin} in
4673                    action | fps)
4674                        type=ActionGame
4675                    ;;
4676                    arcade)
4677                        type=ArcadeGame
4678                    ;;
4679                    board)
4680                        type=BoardGame
4681                    ;;
4682                    emulation)
4683                        type=Emulator
4684                    ;;
4685                    kids)
4686                        type=KidsGame
4687                    ;;
4688                    puzzle)
4689                        type=LogicGame
4690                    ;;
4691                    roguelike)
4692                        type=RolePlaying
4693                    ;;
4694                    rpg)
4695                        type=RolePlaying
4696                    ;;
4697                    simulation)
4698                        type=Simulation
4699                    ;;
4700                    sports)
4701                        type=SportsGame
4702                    ;;
4703                    strategy)
4704                        type=StrategyGame
4705                    ;;
4706                    *)
4707                        type=
4708                    ;;
4709                esac;
4710                type="Game;${type}"
4711            ;;
4712            gnome)
4713                type="Gnome;GTK"
4714            ;;
4715            kde)
4716                type="KDE;Qt"
4717            ;;
4718            mail)
4719                type="Network;Email"
4720            ;;
4721            media)
4722                case ${catmin} in
4723                    gfx)
4724                        type=Graphics
4725                    ;;
4726                    radio)
4727                        type=Tuner
4728                    ;;
4729                    sound)
4730                        type=Audio
4731                    ;;
4732                    tv)
4733                        type=TV
4734                    ;;
4735                    video)
4736                        type=Video
4737                    ;;
4738                    *)
4739                        type=
4740                    ;;
4741                esac;
4742                type="AudioVideo;${type}"
4743            ;;
4744            net)
4745                case ${catmin} in
4746                    dialup)
4747                        type=Dialup
4748                    ;;
4749                    ftp)
4750                        type=FileTransfer
4751                    ;;
4752                    im)
4753                        type=InstantMessaging
4754                    ;;
4755                    irc)
4756                        type=IRCClient
4757                    ;;
4758                    mail)
4759                        type=Email
4760                    ;;
4761                    news)
4762                        type=News
4763                    ;;
4764                    nntp)
4765                        type=News
4766                    ;;
4767                    p2p)
4768                        type=FileTransfer
4769                    ;;
4770                    *)
4771                        type=
4772                    ;;
4773                esac;
4774                type="Network;${type}"
4775            ;;
4776            sci)
4777                case ${catmin} in
4778                    astro*)
4779                        type=Astronomy
4780                    ;;
4781                    bio*)
4782                        type=Biology
4783                    ;;
4784                    calc*)
4785                        type=Calculator
4786                    ;;
4787                    chem*)
4788                        type=Chemistry
4789                    ;;
4790                    elec*)
4791                        type=Electronics
4792                    ;;
4793                    geo*)
4794                        type=Geology
4795                    ;;
4796                    math*)
4797                        type=Math
4798                    ;;
4799                    physics)
4800                        type=Physics
4801                    ;;
4802                    visual*)
4803                        type=DataVisualization
4804                    ;;
4805                    *)
4806                        type=
4807                    ;;
4808                esac;
4809                type="Science;${type}"
4810            ;;
4811            sys)
4812                type="System"
4813            ;;
4814            www)
4815                case ${catmin} in
4816                    client)
4817                        type=WebBrowser
4818                    ;;
4819                    *)
4820                        type=
4821                    ;;
4822                esac;
4823                type="Network"
4824            ;;
4825            *)
4826                type=
4827            ;;
4828        esac;
4829    fi;
4830    if [ "${SLOT}" == "0" ]; then
4831        local desktop_name="${PN}";
4832    else
4833        local desktop_name="${PN}-${SLOT}";
4834    fi;
4835    local desktop="${T}/$(echo ${exec} | sed 's:[[:space:]/:]:_:g')-${desktop_name}.desktop";
4836    cat > "${desktop}"  <<-EOF
4837[Desktop Entry]
4838Version=1.0
4839Name=${name}
4840Type=Application
4841Comment=${DESCRIPTION}
4842Exec=${exec}
4843TryExec=${exec%% *}
4844Icon=${icon}
4845Categories=${type};
4846EOF
4847
4848    [[ -n ${path} ]] && echo "Path=${path}" >> "${desktop}";
4849    ( insinto /usr/share/applications;
4850    doins "${desktop}" )
4851}
4852make_session_desktop ()
4853{
4854    [[ -z $1 ]] && eerror "$0: You must specify the title" && return 1;
4855    [[ -z $2 ]] && eerror "$0: You must specify the command" && return 1;
4856    local title=$1;
4857    local command=$2;
4858    local desktop=${T}/${wm:-${PN}}.desktop;
4859    shift 2;
4860    cat > "${desktop}"  <<-EOF
4861[Desktop Entry]
4862Name=${title}
4863Comment=This session logs you into ${title}
4864Exec=${command} $*
4865TryExec=${command}
4866Type=XSession
4867EOF
4868
4869    ( insinto /usr/share/xsessions;
4870    doins "${desktop}" )
4871}
4872make_wrapper ()
4873{
4874    local wrapper=$1 bin=$2 chdir=$3 libdir=$4 path=$5;
4875    local tmpwrapper=$(emktemp);
4876    cat > "${tmpwrapper}"  <<EOF
4877#!/bin/sh
4878cd "${chdir:-.}"
4879if [ -n "${libdir}" ] ; then
4880        if [ "\${LD_LIBRARY_PATH+set}" = "set" ] ; then
4881                export LD_LIBRARY_PATH="\${LD_LIBRARY_PATH}:${libdir}"
4882        else
4883                export LD_LIBRARY_PATH="${libdir}"
4884        fi
4885fi
4886exec ${bin} "\$@"
4887EOF
4888
4889    chmod go+rx "${tmpwrapper}";
4890    if [[ -n ${path} ]]; then
4891        ( exeinto "${path}";
4892        newexe "${tmpwrapper}" "${wrapper}" ) || die;
4893    else
4894        newbin "${tmpwrapper}" "${wrapper}" || die;
4895    fi
4896}
4897multilib_env ()
4898{
4899    local CTARGET=${1:-${CTARGET}};
4900    case ${CTARGET} in
4901        x86_64*)
4902            export CFLAGS_x86=${CFLAGS_x86--m32};
4903            export CHOST_x86=${CTARGET/x86_64/i686};
4904            export CTARGET_x86=${CHOST_x86};
4905            export CDEFINE_x86="__i386__";
4906            export LIBDIR_x86="lib";
4907            export CFLAGS_amd64=${CFLAGS_amd64--m64};
4908            export CHOST_amd64=${CTARGET};
4909            export CTARGET_amd64=${CHOST_amd64};
4910            export CDEFINE_amd64="__x86_64__";
4911            export LIBDIR_amd64="lib64";
4912            export MULTILIB_ABIS="amd64 x86";
4913            export DEFAULT_ABI="amd64"
4914        ;;
4915        mips64*)
4916            export CFLAGS_o32=${CFLAGS_o32--mabi=32};
4917            export CHOST_o32=${CTARGET/mips64/mips};
4918            export CTARGET_o32=${CHOST_o32};
4919            export CDEFINE_o32="_MIPS_SIM == _ABIO32";
4920            export LIBDIR_o32="lib";
4921            export CFLAGS_n32=${CFLAGS_n32--mabi=n32};
4922            export CHOST_n32=${CTARGET};
4923            export CTARGET_n32=${CHOST_n32};
4924            export CDEFINE_n32="_MIPS_SIM == _ABIN32";
4925            export LIBDIR_n32="lib32";
4926            export CFLAGS_n64=${CFLAGS_n64--mabi=64};
4927            export CHOST_n64=${CTARGET};
4928            export CTARGET_n64=${CHOST_n64};
4929            export CDEFINE_n64="_MIPS_SIM == _ABI64";
4930            export LIBDIR_n64="lib64";
4931            export MULTILIB_ABIS="n64 n32 o32";
4932            export DEFAULT_ABI="n32"
4933        ;;
4934        powerpc64*)
4935            export CFLAGS_ppc=${CFLAGS_ppc--m32};
4936            export CHOST_ppc=${CTARGET/powerpc64/powerpc};
4937            export CTARGET_ppc=${CHOST_ppc};
4938            export CDEFINE_ppc="!__powerpc64__";
4939            export LIBDIR_ppc="lib";
4940            export CFLAGS_ppc64=${CFLAGS_ppc64--m64};
4941            export CHOST_ppc64=${CTARGET};
4942            export CTARGET_ppc64=${CHOST_ppc64};
4943            export CDEFINE_ppc64="__powerpc64__";
4944            export LIBDIR_ppc64="lib64";
4945            export MULTILIB_ABIS="ppc64 ppc";
4946            export DEFAULT_ABI="ppc64"
4947        ;;
4948        s390x*)
4949            export CFLAGS_s390=${CFLAGS_s390--m31};
4950            export CHOST_s390=${CTARGET/s390x/s390};
4951            export CTARGET_s390=${CHOST_s390};
4952            export CDEFINE_s390="!__s390x__";
4953            export LIBDIR_s390="lib";
4954            export CFLAGS_s390x=${CFLAGS_s390x--m64};
4955            export CHOST_s390x=${CTARGET};
4956            export CTARGET_s390x=${CHOST_s390x};
4957            export CDEFINE_s390x="__s390x__";
4958            export LIBDIR_s390x="lib64";
4959            export MULTILIB_ABIS="s390x s390";
4960            export DEFAULT_ABI="s390x"
4961        ;;
4962        sparc*)
4963            export CFLAGS_sparc32=${CFLAGS_sparc32};
4964            export CHOST_sparc32=${CTARGET/sparc64/sparc};
4965            export CTARGET_sparc32=${CHOST_sparc32};
4966            export CDEFINE_sparc32="!__arch64__";
4967            export LIBDIR_sparc32="lib";
4968            export CFLAGS_sparc64=${CFLAGS_sparc64--m64};
4969            export CHOST_sparc64=${CTARGET};
4970            export CTARGET_sparc64=${CHOST_sparc64};
4971            export CDEFINE_sparc64="__arch64__";
4972            export LIBDIR_sparc64="lib64";
4973            export MULTILIB_ABIS="${MULTILIB_ABIS-sparc64 sparc32}";
4974            export DEFAULT_ABI="${DEFAULT_ABI-sparc64}"
4975        ;;
4976        *)
4977            export MULTILIB_ABIS="default";
4978            export DEFAULT_ABI="default"
4979        ;;
4980    esac
4981}
4982multilib_toolchain_setup ()
4983{
4984    local v vv;
4985    export ABI=$1;
4986    if [[ ${ABI} != ${DEFAULT_ABI} ]]; then
4987        if [[ ${DEFAULT_ABI_SAVED} != "true" ]]; then
4988            for v in CHOST CBUILD AS CC CXX LD;
4989            do
4990                export __abi_saved_${v}="${!v}";
4991            done;
4992            export DEFAULT_ABI_SAVED="true";
4993        fi;
4994        export CHOST=$(get_abi_CHOST ${DEFAULT_ABI});
4995        export AS="$(tc-getAS) $(get_abi_ASFLAGS)";
4996        export CC="$(tc-getCC) $(get_abi_CFLAGS)";
4997        export CXX="$(tc-getCXX) $(get_abi_CFLAGS)";
4998        export LD="$(tc-getLD) $(get_abi_LDFLAGS)";
4999        export CHOST=$(get_abi_CHOST $1);
5000        export CBUILD=$(get_abi_CHOST $1);
5001    else
5002        if [[ ${DEFAULT_ABI_SAVED} == "true" ]]; then
5003            for v in CHOST CBUILD AS CC CXX LD;
5004            do
5005                vv="__abi_saved_${v}";
5006                export ${v}=${!vv};
5007            done;
5008        fi;
5009    fi
5010}
5011need_apache ()
5012{
5013    debug-print-function $FUNCNAME $*;
5014    need_apache2
5015}
5016need_apache2 ()
5017{
5018    debug-print-function $FUNCNAME $*;
5019    DEPEND="${DEPEND} ${APACHE2_DEPEND}";
5020    RDEPEND="${RDEPEND} ${APACHE2_DEPEND}";
5021    _init_apache2
5022}
5023need_apache2_2 ()
5024{
5025    debug-print-function $FUNCNAME $*;
5026    DEPEND="${DEPEND} ${APACHE2_2_DEPEND}";
5027    RDEPEND="${RDEPEND} ${APACHE2_2_DEPEND}";
5028    _init_apache2
5029}
5030newicon ()
5031{
5032    ( insinto /usr/share/pixmaps;
5033    newins "$@" )
5034}
5035newmenu ()
5036{
5037    ( insinto /usr/share/applications;
5038    newins "$@" )
5039}
5040number_abis ()
5041{
5042    get_install_abis | wc -w
5043}
5044perl-module_pkg_postinst ()
5045{
5046    :
5047}
5048perl-module_pkg_postrm ()
5049{
5050    :
5051}
5052perl-module_pkg_preinst ()
5053{
5054    ${perlinfo_done} || perlinfo
5055}
5056perl-module_pkg_prerm ()
5057{
5058    :
5059}
5060perl-module_pkg_setup ()
5061{
5062    ${perlinfo_done} || perlinfo
5063}
5064perl-module_src_compile ()
5065{
5066    ${perlinfo_done} || perlinfo;
5067    has "${EAPI:-0}" 0 1 && perl-module_src_prep;
5068    if [[ -f Build ]]; then
5069        ./Build build || die "compilation failed";
5070    else
5071        if [[ -f Makefile ]]; then
5072            emake OTHERLDFLAGS="${LDFLAGS}" ${mymake} || die "compilation failed";
5073        fi;
5074    fi
5075}
5076perl-module_src_configure ()
5077{
5078    perl-module_src_prep
5079}
5080perl-module_src_install ()
5081{
5082    local f;
5083    ${perlinfo_done} || perlinfo;
5084    if [[ -z ${mytargets} ]]; then
5085        case "${CATEGORY}" in
5086            dev-perl | perl-core)
5087                mytargets="pure_install"
5088            ;;
5089            *)
5090                mytargets="install"
5091            ;;
5092        esac;
5093    fi;
5094    if [[ -f Build ]]; then
5095        ./Build ${mytargets} || die "./Build ${mytargets} failed";
5096    else
5097        if [[ -f Makefile ]]; then
5098            emake ${myinst} ${mytargets} || die "emake ${myinst} ${mytargets} failed";
5099        fi;
5100    fi;
5101    if [[ -d "${D}"/usr/share/man ]]; then
5102        find "${D}"/usr/share/man -type f -name "*.3pm" -delete;
5103        find "${D}"/usr/share/man -depth -type d -empty -delete;
5104    fi;
5105    fixlocalpod;
5106    for f in Change* CHANGES README* ${mydoc};
5107    do
5108        [[ -s "${f}" ]] && dodoc ${f};
5109    done;
5110    if [[ -d "${D}/${VENDOR_LIB}" ]]; then
5111        find "${D}/${VENDOR_LIB}" -type f -a \( -name .packlist -o \( -name '*.bs' -a -empty \) \) -delete;
5112        find "${D}/${VENDOR_LIB}" -depth -mindepth 1 -type d -empty -delete;
5113    fi;
5114    find "${D}" -type f -not -name '*.so' -print0 | while read -rd '' f; do
5115        if file "${f}" | grep -q -i " text"; then
5116            if grep -q "${D}" "${f}"; then
5117                ewarn "QA: File contains a temporary path ${f}";
5118            fi;
5119            sed -i -e "s:${D}:/:g" "${f}";
5120        fi;
5121    done
5122}
5123perl-module_src_prep ()
5124{
5125    [[ "${SRC_PREP}" = "yes" ]] && return 0;
5126    SRC_PREP="yes";
5127    ${perlinfo_done} || perlinfo;
5128    export PERL_MM_USE_DEFAULT=1;
5129    export PERL_EXTUTILS_AUTOINSTALL="--skipdeps";
5130    if [[ "${PREFER_BUILDPL}" == "yes" && -f Build.PL ]]; then
5131        einfo "Using Module::Build";
5132        perl Build.PL --installdirs=vendor --libdoc= --destdir="${D}" --create_packlist=0 ${myconf} <<< "${pm_echovar}" || die "Unable to build! (are you using USE=\"build\"?)";
5133    else
5134        if [[ -f Makefile.PL ]]; then
5135            einfo "Using ExtUtils::MakeMaker";
5136            perl Makefile.PL PREFIX=/usr INSTALLDIRS=vendor INSTALLMAN3DIR='none' DESTDIR="${D}" ${myconf} <<< "${pm_echovar}" || die "Unable to build! (are you using USE=\"build\"?)";
5137        fi;
5138    fi;
5139    if [[ ! -f Build.PL && ! -f Makefile.PL ]]; then
5140        einfo "No Make or Build file detected...";
5141        return;
5142    fi
5143}
5144perl-module_src_prepare ()
5145{
5146    if [[ -n ${PATCHES} ]]; then
5147        base_src_unpack autopatch;
5148    fi;
5149    esvn_clean
5150}
5151perl-module_src_test ()
5152{
5153    if [[ "${SRC_TEST}" == "do" ]]; then
5154        ${perlinfo_done} || perlinfo;
5155        if [[ -f Build ]]; then
5156            ./Build test || die "test failed";
5157        else
5158            if [[ -f Makefile ]]; then
5159                emake test || die "test failed";
5160            fi;
5161        fi;
5162    fi
5163}
5164perl-module_src_unpack ()
5165{
5166    base_src_unpack unpack;
5167    has "${EAPI:-0}" 0 1 && perl-module_src_prepare
5168}
5169perlinfo ()
5170{
5171    perlinfo_done=true;
5172    local f version install{site{arch,lib},archlib,vendor{arch,lib}};
5173    for f in version install{site{arch,lib},archlib,vendor{arch,lib}};
5174    do
5175        eval "$(perl -V:${f} )";
5176    done;
5177    PERL_VERSION=${version};
5178    SITE_ARCH=${installsitearch};
5179    SITE_LIB=${installsitelib};
5180    ARCH_LIB=${installarchlib};
5181    VENDOR_LIB=${installvendorlib};
5182    VENDOR_ARCH=${installvendorarch}
5183}
5184pkg_config ()
5185{
5186    einfo ">>> Initializing the database in ${ROOT}${SVN_REPOS_LOC} ...";
5187    if [[ -e "${ROOT}${SVN_REPOS_LOC}/repos" ]]; then
5188        echo "A Subversion repository already exists and I will not overwrite it.";
5189        echo "Delete \"${ROOT}${SVN_REPOS_LOC}/repos\" first if you're sure you want to have a clean version.";
5190    else
5191        mkdir -p "${ROOT}${SVN_REPOS_LOC}/conf";
5192        einfo ">>> Populating repository directory ...";
5193        "${ROOT}usr/bin/svnadmin" create "${ROOT}${SVN_REPOS_LOC}/repos";
5194        einfo ">>> Setting repository permissions ...";
5195        SVNSERVE_USER="$(. "${ROOT}etc/conf.d/svnserve"; echo "${SVNSERVE_USER}")";
5196        SVNSERVE_GROUP="$(. "${ROOT}etc/conf.d/svnserve"; echo "${SVNSERVE_GROUP}")";
5197        if use apache2; then
5198            [[ -z "${SVNSERVE_USER}" ]] && SVNSERVE_USER="apache";
5199            [[ -z "${SVNSERVE_GROUP}" ]] && SVNSERVE_GROUP="apache";
5200        else
5201            [[ -z "${SVNSERVE_USER}" ]] && SVNSERVE_USER="svn";
5202            [[ -z "${SVNSERVE_GROUP}" ]] && SVNSERVE_GROUP="svnusers";
5203            enewgroup "${SVNSERVE_GROUP}";
5204            enewuser "${SVNSERVE_USER}" -1 -1 "${SVN_REPOS_LOC}" "${SVNSERVE_GROUP}";
5205        fi;
5206        chown -Rf "${SVNSERVE_USER}:${SVNSERVE_GROUP}" "${ROOT}${SVN_REPOS_LOC}/repos";
5207        chmod -Rf go-rwx "${ROOT}${SVN_REPOS_LOC}/conf";
5208        chmod -Rf o-rwx "${ROOT}${SVN_REPOS_LOC}/repos";
5209    fi
5210}
5211pkg_nofetch ()
5212{
5213    _eapi0_pkg_nofetch "$@"
5214}
5215pkg_postinst ()
5216{
5217    use emacs && elisp-site-regen;
5218    use perl && perl-module_pkg_postinst;
5219    if use ctypes-python; then
5220        python_mod_compile "$(python_get_sitedir)/csvn/"{.,core,ext}/*.py;
5221    fi;
5222    elog "Subversion Server Notes";
5223    elog "-----------------------";
5224    elog;
5225    elog "If you intend to run a server, a repository needs to be created using";
5226    elog "svnadmin (see man svnadmin) or the following command to create it in";
5227    elog "${SVN_REPOS_LOC}:";
5228    elog;
5229    elog "    emerge --config =${CATEGORY}/${PF}";
5230    elog;
5231    elog "Subversion has multiple server types, take your pick:";
5232    elog;
5233    elog " - svnserve daemon: ";
5234    elog "   1. Edit /etc/conf.d/svnserve";
5235    elog "   2. Fix the repository permissions (see \"Fixing the repository permissions\")";
5236    elog "   3. Start daemon: /etc/init.d/svnserve start";
5237    elog "   4. Make persistent: rc-update add svnserve default";
5238    elog;
5239    elog " - svnserve via xinetd:";
5240    elog "   1. Edit /etc/xinetd.d/svnserve (remove disable line)";
5241    elog "   2. Fix the repository permissions (see \"Fixing the repository permissions\")";
5242    elog "   3. Restart xinetd.d: /etc/init.d/xinetd restart";
5243    elog;
5244    elog " - svn over ssh:";
5245    elog "   1. Fix the repository permissions (see \"Fixing the repository permissions\")";
5246    elog "      Additionally run:";
5247    elog "        groupadd svnusers";
5248    elog "        chown -R root:svnusers ${SVN_REPOS_LOC}/repos";
5249    elog "   2. Create an svnserve wrapper in /usr/local/bin to set the umask you";
5250    elog "      want, for example:";
5251    elog "         #!/bin/bash";
5252    elog "         . /etc/conf.d/svnserve";
5253    elog "         umask 007";
5254    elog "         exec /usr/bin/svnserve \${SVNSERVE_OPTS} \"\$@\"";
5255    elog;
5256    if use apache2; then
5257        elog " - http-based server:";
5258        elog "   1. Edit /etc/conf.d/apache2 to include both \"-D DAV\" and \"-D SVN\"";
5259        elog "   2. Create an htpasswd file:";
5260        elog "      htpasswd2 -m -c ${SVN_REPOS_LOC}/conf/svnusers USERNAME";
5261        elog "   3. Fix the repository permissions (see \"Fixing the repository permissions\")";
5262        elog "   4. Restart Apache: /etc/init.d/apache2 restart";
5263        elog;
5264    fi;
5265    elog " Fixing the repository permissions:";
5266    elog "      chmod -Rf go-rwx ${SVN_REPOS_LOC}/conf";
5267    elog "      chmod -Rf g-w,o-rwx ${SVN_REPOS_LOC}/repos";
5268    elog "      chmod -Rf g+rw ${SVN_REPOS_LOC}/repos/db";
5269    elog "      chmod -Rf g+rw ${SVN_REPOS_LOC}/repos/locks";
5270    elog;
5271    elog "If you intend to use svn-hot-backup, you can specify the number of";
5272    elog "backups to keep per repository by specifying an environment variable.";
5273    elog "If you want to keep e.g. 2 backups, do the following:";
5274    elog "echo '# hot-backup: Keep that many repository backups around' > /etc/env.d/80subversion";
5275    elog "echo 'SVN_HOTBACKUP_BACKUPS_NUMBER=2' >> /etc/env.d/80subversion";
5276    elog;
5277    elog "Subversion contains support for the use of Memcached";
5278    elog "to cache data of FSFS repositories.";
5279    elog "You should install \"net-misc/memcached\", start memcached";
5280    elog "and configure your FSFS repositories, if you want to use this feature.";
5281    elog "See the documentation for details.";
5282    elog;
5283    epause 6;
5284    if [[ -n "${CHANGED_BDB_VERSION}" ]]; then
5285        ewarn "You upgraded from an older version of Berkeley DB and may experience";
5286        ewarn "problems with your repository. Run the following commands as root to fix it:";
5287        ewarn "    db4_recover -h ${SVN_REPOS_LOC}/repos";
5288        ewarn "    chown -Rf apache:apache ${SVN_REPOS_LOC}/repos";
5289    fi
5290}
5291pkg_postrm ()
5292{
5293    use emacs && elisp-site-regen;
5294    use perl && perl-module_pkg_postrm;
5295    if use ctypes-python; then
5296        python_mod_cleanup;
5297    fi
5298}
5299pkg_preinst ()
5300{
5301    if use berkdb && [[ -f "${ROOT}usr/bin/svn" ]]; then
5302        OLD_BDB_VERSION="$(scanelf -nq "${ROOT}usr/$(get_libdir)/libsvn_subr-1.so.0" | grep -Eo "libdb-[[:digit:]]+\.[[:digit:]]+" | sed -e "s/libdb-\(.*\)/\1/")";
5303        NEW_BDB_VERSION="$(scanelf -nq "${D}usr/$(get_libdir)/libsvn_subr-1.so.0" | grep -Eo "libdb-[[:digit:]]+\.[[:digit:]]+" | sed -e "s/libdb-\(.*\)/\1/")";
5304        if [[ "${OLD_BDB_VERSION}" != "${NEW_BDB_VERSION}" ]]; then
5305            CHANGED_BDB_VERSION="1";
5306        fi;
5307    fi
5308}
5309pkg_setup ()
5310{
5311    if use berkdb; then
5312        einfo;
5313        if [[ -z "${SVN_BDB_VERSION}" ]]; then
5314            SVN_BDB_VERSION="$(db_ver_to_slot "$(db_findver sys-libs/db 2>/dev/null)")";
5315            einfo "SVN_BDB_VERSION variable isn't set. You can set it to enforce using of specific version of Berkeley DB.";
5316        fi;
5317        einfo "Using: Berkeley DB ${SVN_BDB_VERSION}";
5318        einfo;
5319        local apu_bdb_version="$(scanelf -nq "${ROOT}usr/$(get_libdir)/libaprutil-1.so.0" | grep -Eo "libdb-[[:digit:]]+\.[[:digit:]]+" | sed -e "s/libdb-\(.*\)/\1/")";
5320        if [[ -n "${apu_bdb_version}" && "${SVN_BDB_VERSION}" != "${apu_bdb_version}" ]]; then
5321            eerror "APR-Util is linked against Berkeley DB ${apu_bdb_version}, but you are trying";
5322            eerror "to build Subversion with support for Berkeley DB ${SVN_BDB_VERSION}.";
5323            eerror "Rebuild dev-libs/apr-util or set SVN_BDB_VERSION=\"${apu_bdb_version}\".";
5324            eerror "Aborting to avoid possible run-time crashes.";
5325            die "Berkeley DB version mismatch";
5326        fi;
5327    fi;
5328    depend.apache_pkg_setup;
5329    java-pkg-opt-2_pkg_setup;
5330    if ! use webdav-neon && ! use webdav-serf; then
5331        ewarn;
5332        ewarn "WebDAV support is disabled. You need WebDAV to";
5333        ewarn "access repositories through the HTTP protocol.";
5334        ewarn;
5335        ewarn "WebDAV support needs one of the following USE flags enabled:";
5336        ewarn "  webdav-neon webdav-serf";
5337        ewarn;
5338        ewarn "You can do this by enabling one of these flags in /etc/portage/package.use:";
5339        ewarn "    ${CATEGORY}/${PN} webdav-neon webdav-serf";
5340        ewarn;
5341        ebeep;
5342    fi;
5343    if use test; then
5344        elog;
5345        elog "\e[31m************************************************************************************************\e[0m";
5346        elog;
5347        elog "NOTES ABOUT TESTS";
5348        elog;
5349        elog "You can set the following variables to enable testing of some features and configure testing:";
5350        if use webdav-neon || use webdav-serf; then
5351            elog "  SVN_TEST_APACHE=1                     - Enable testing of mod_dav_svn, mod_authz_svn and libsvn_ra_neon / libsvn_ra_serf";
5352            elog "                                          (See \"Testing of mod_dav_svn, mod_authz_svn and libsvn_ra_neon / libsvn_ra_serf\")";
5353        fi;
5354        elog "  SVN_TEST_SVNSERVE_PORT=integer        - Set svnserve port number (Default value: 3690)";
5355        elog "  SVN_TEST_FSFS_MEMCACHED=1             - Enable using of Memcached for FSFS repositories";
5356        elog "  SVN_TEST_FSFS_MEMCACHED_PORT=integer  - Set Memcached port number (Default value: 11211)";
5357        elog "  SVN_TEST_FSFS_SHARDING=integer        - Enable sharding of FSFS repositories and set default shard size for FSFS repositories";
5358        elog "  SVN_TEST_FSFS_PACKING=1               - Enable packing of FSFS repositories";
5359        elog "                                          (SVN_TEST_FSFS_PACKING requires SVN_TEST_FSFS_SHARDING)";
5360        if use ctypes-python || use java || use perl || use python || use ruby; then
5361            elog "  SVN_TEST_BINDINGS=1                   - Enable testing of bindings";
5362        fi;
5363        if use java || use perl || use python || use ruby; then
5364            elog "                                          (Testing of bindings requires ${CATEGORY}/${PF})";
5365        fi;
5366        if use java; then
5367            elog "                                          (Testing of JavaHL library requires dev-java/junit:4)";
5368        fi;
5369        elog;
5370        if ! use webdav-neon && ! use webdav-serf; then
5371            elog "\e[31m************************************************************************************************\e[0m";
5372            elog;
5373            epause 24;
5374        fi;
5375        if {
5376            use webdav-neon || use webdav-serf
5377        } && [[ -n "${SVN_TEST_APACHE}" ]] && ! has_version "${CATEGORY}/${PN}[apache2]"; then
5378            die "${CATEGORY}/${PN} must be installed with USE=\"apache2\"";
5379        fi;
5380        if [[ -n "${SVN_TEST_SVNSERVE_PORT}" ]] && ! ( [[ "$((${SVN_TEST_SVNSERVE_PORT}))" == "${SVN_TEST_SVNSERVE_PORT}" ]] ) >&/dev/null; then
5381            die "Value of SVN_TEST_SVNSERVE_PORT must be an integer";
5382        fi;
5383        if [[ -n "${SVN_TEST_FSFS_MEMCACHED}" ]] && ! has_version net-misc/memcached; then
5384            die "net-misc/memcached must be installed";
5385        fi;
5386        if [[ -n "${SVN_TEST_FSFS_MEMCACHED_PORT}" ]] && ! ( [[ "$((${SVN_TEST_FSFS_MEMCACHED_PORT}))" == "${SVN_TEST_FSFS_MEMCACHED_PORT}" ]] ) >&/dev/null; then
5387            die "Value of SVN_TEST_FSFS_MEMCACHED_PORT must be an integer";
5388        fi;
5389        if [[ -n "${SVN_TEST_FSFS_SHARDING}" ]] && ! ( [[ "$((${SVN_TEST_FSFS_SHARDING}))" == "${SVN_TEST_FSFS_SHARDING}" ]] ) >&/dev/null; then
5390            die "Value of SVN_TEST_FSFS_SHARDING must be an integer";
5391        fi;
5392        if [[ -n "${SVN_TEST_FSFS_PACKING}" && -z "${SVN_TEST_FSFS_SHARDING}" ]]; then
5393            die "SVN_TEST_FSFS_PACKING requires SVN_TEST_FSFS_SHARDING";
5394        fi;
5395        if [[ -n "${SVN_TEST_BINDINGS}" ]]; then
5396            if {
5397                use java || use perl || use python || use ruby
5398            } && ! has_version "=${CATEGORY}/${PF}"; then
5399                die "${CATEGORY}/${PF} must be installed";
5400            fi;
5401            if use java && ! has_version dev-java/junit:4; then
5402                die "dev-java/junit:4 must be installed";
5403            fi;
5404        fi;
5405    fi;
5406    append-flags -fno-strict-aliasing;
5407    if use debug; then
5408        append-cppflags -DSVN_DEBUG -DAP_DEBUG;
5409    fi
5410}
5411prep_ml_includes ()
5412{
5413    if [[ $(number_abis) -gt 1 ]]; then
5414        local dir;
5415        local dirs;
5416        local base;
5417        if [[ $# -eq 0 ]]; then
5418            dirs=/usr/include;
5419        else
5420            dirs="$@";
5421        fi;
5422        for dir in ${dirs};
5423        do
5424            base=${T}/gentoo-multilib/${dir}/gentoo-multilib;
5425            mkdir -p "${base}";
5426            [[ -d ${base}/${ABI} ]] && rm -rf "${base}/${ABI}";
5427            mv "${D}/${dir}" "${base}/${ABI}";
5428        done;
5429        if is_final_abi; then
5430            base=${T}/gentoo-multilib;
5431            pushd "${base}";
5432            find . | tar -c -T - -f - | tar -x --no-same-owner -f - -C "${D}";
5433            popd;
5434            set --;
5435            for dir in ${dirs};
5436            do
5437                set -- "$@" "${dir}";
5438                local abi;
5439                for abi in $(get_install_abis);
5440                do
5441                    set -- "$@" "$(get_abi_CDEFINE ${abi}):${dir}/gentoo-multilib/${abi}";
5442                done;
5443                create_ml_includes "$@";
5444            done;
5445        fi;
5446    fi
5447}
5448preserve_old_lib ()
5449{
5450    if [[ ${EBUILD_PHASE} != "preinst" ]]; then
5451        eerror "preserve_old_lib() must be called from pkg_preinst() only";
5452        die "Invalid preserve_old_lib() usage";
5453    fi;
5454    [[ -z $1 ]] && die "Usage: preserve_old_lib <library to preserve> [more libraries to preserve]";
5455    has preserve-libs ${FEATURES} && return 0;
5456    local lib dir;
5457    for lib in "$@";
5458    do
5459        [[ -e ${ROOT}/${lib} ]] || continue;
5460        dir=${lib%/*};
5461        dodir ${dir} || die "dodir ${dir} failed";
5462        cp "${ROOT}"/${lib} "${D}"/${lib} || die "cp ${lib} failed";
5463        touch "${D}"/${lib};
5464    done
5465}
5466preserve_old_lib_notify ()
5467{
5468    if [[ ${EBUILD_PHASE} != "postinst" ]]; then
5469        eerror "preserve_old_lib_notify() must be called from pkg_postinst() only";
5470        die "Invalid preserve_old_lib_notify() usage";
5471    fi;
5472    has preserve-libs ${FEATURES} && return 0;
5473    local lib notice=0;
5474    for lib in "$@";
5475    do
5476        [[ -e ${ROOT}/${lib} ]] || continue;
5477        if [[ ${notice} -eq 0 ]]; then
5478            notice=1;
5479            ewarn "Old versions of installed libraries were detected on your system.";
5480            ewarn "In order to avoid breaking packages that depend on these old libs,";
5481            ewarn "the libraries are not being removed.  You need to run revdep-rebuild";
5482            ewarn "in order to remove these old dependencies.  If you do not have this";
5483            ewarn "helper program, simply emerge the 'gentoolkit' package.";
5484            ewarn;
5485        fi;
5486        ewarn "  # revdep-rebuild --library ${lib##*/}";
5487    done;
5488    if [[ ${notice} -eq 1 ]]; then
5489        ewarn;
5490        ewarn "Once you've finished running revdep-rebuild, it should be safe to";
5491        ewarn "delete the old libraries.  Here is a copy & paste for the lazy:";
5492        for lib in "$@";
5493        do
5494            ewarn "  # rm '${lib}'";
5495        done;
5496    fi
5497}
5498python_disable_pyc ()
5499{
5500    export PYTHONDONTWRITEBYTECODE=1;
5501    export PYTHON_DONTCOMPILE=1
5502}
5503python_enable_pyc ()
5504{
5505    unset PYTHONDONTWRITEBYTECODE;
5506    unset PYTHON_DONTCOMPILE
5507}
5508python_get_libdir ()
5509{
5510    python_version;
5511    echo "/usr/$(get_libdir)/python${PYVER}"
5512}
5513python_get_sitedir ()
5514{
5515    echo "$(python_get_libdir)/site-packages"
5516}
5517python_makesym ()
5518{
5519    alternatives_auto_makesym "/usr/bin/python" "python[0-9].[0-9]";
5520    alternatives_auto_makesym "/usr/bin/python2" "python2.[0-9]"
5521}
5522python_mod_cleanup ()
5523{
5524    local SEARCH_PATH=() myroot src_py;
5525    [[ ${EBUILD_PHASE} != postrm ]] && die "${FUNCNAME} should only be run in pkg_postrm()";
5526    myroot="${ROOT%/}";
5527    if (($#)); then
5528        SEARCH_PATH=("${@#/}");
5529        SEARCH_PATH=("${SEARCH_PATH[@]/#/$myroot/}");
5530    else
5531        SEARCH_PATH=("${myroot}"/usr/lib*/python*/site-packages);
5532    fi;
5533    for path in "${SEARCH_PATH[@]}";
5534    do
5535        einfo "Cleaning orphaned Python bytecode from ${path} ..";
5536        find "${path}" -name '*.py[co]' -print0 | while read -rd ''; do
5537            src_py="${REPLY%[co]}";
5538            [[ -f "${src_py}" ]] && continue;
5539            einfo "Purging ${src_py}[co]";
5540            rm -f "${src_py}"[co];
5541        done;
5542        find "${path}" -type d | sort -r | while read -r dir; do
5543            rmdir "${dir}" 2> /dev/null;
5544        done;
5545    done
5546}
5547python_mod_compile ()
5548{
5549    local f myroot myfiles=();
5550    [[ ${EBUILD_PHASE} != postinst ]] && die "${FUNCNAME} should only be run in pkg_postinst()";
5551    if [[ -n "${PYTHON_OVERRIDE_PYVER}" ]]; then
5552        PYVER=${PYTHON_OVERRIDE_PYVER};
5553    else
5554        python_version;
5555    fi;
5556    myroot="${ROOT%/}";
5557    for f in "$@";
5558    do
5559        [[ -f "${myroot}/${f}" ]] && myfiles+=("${myroot}/${f}");
5560    done;
5561    if ((${#myfiles[@]})); then
5562        python${PYVER} ${myroot}/usr/$(get_libdir)/python${PYVER}/py_compile.py "${myfiles[@]}";
5563        python${PYVER} -O ${myroot}/usr/$(get_libdir)/python${PYVER}/py_compile.py "${myfiles[@]}";
5564    else
5565        ewarn "No files to compile!";
5566    fi
5567}
5568python_mod_exists ()
5569{
5570    [[ -n "$1" ]] || die "${FUNCNAME} requires an argument!";
5571    python -c "import $1" > /dev/null 2>&1
5572}
5573python_mod_optimize ()
5574{
5575    local myroot mydirs=() myfiles=() myopts=();
5576    [[ ${EBUILD_PHASE} != postinst ]] && die "${FUNCNAME} should only be run in pkg_postinst()";
5577    myroot="${ROOT%/}";
5578    while (($#)); do
5579        case $1 in
5580            -l | -f | -q)
5581                myopts+=("$1")
5582            ;;
5583            -d | -x)
5584                myopts+=("$1" "$2");
5585                shift
5586            ;;
5587            -*)
5588                ewarn "${FUNCNAME}: Ignoring compile option $1"
5589            ;;
5590            *)
5591                if [[ -d "${myroot}"/$1 ]]; then
5592                    mydirs+=("${myroot}/$1");
5593                else
5594                    if [[ -f "${myroot}"/$1 ]]; then
5595                        myfiles+=("$1");
5596                    else
5597                        if [[ -e "${myroot}/$1" ]]; then
5598                            ewarn "${myroot}/$1 is not a file or directory!";
5599                        else
5600                            ewarn "${myroot}/$1 doesn't exist!";
5601                        fi;
5602                    fi;
5603                fi
5604            ;;
5605        esac;
5606        shift;
5607    done;
5608    if [ -n "${PYTHON_OVERRIDE_PYVER}" ]; then
5609        PYVER=${PYTHON_OVERRIDE_PYVER};
5610    else
5611        python_version;
5612    fi;
5613    myopts+=(-q);
5614    ebegin "Byte compiling python modules for python-${PYVER} ..";
5615    if ((${#mydirs[@]})); then
5616        python${PYVER} "${myroot}"/usr/$(get_libdir)/python${PYVER}/compileall.py "${myopts[@]}" "${mydirs[@]}";
5617        python${PYVER} -O "${myroot}"/usr/$(get_libdir)/python${PYVER}/compileall.py "${myopts[@]}" "${mydirs[@]}";
5618    fi;
5619    if ((${#myfiles[@]})); then
5620        python_mod_compile "${myfiles[@]}";
5621    fi;
5622    eend $?
5623}
5624python_need_rebuild ()
5625{
5626    python_version;
5627    export PYTHON_NEED_REBUILD=${PYVER}
5628}
5629python_tkinter_exists ()
5630{
5631    if ! python -c "import Tkinter" > /dev/null 2>&1; then
5632        eerror "You need to recompile python with Tkinter support.";
5633        eerror "Try adding: 'dev-lang/python tk'";
5634        eerror "in to /etc/portage/package.use";
5635        echo;
5636        die "missing tkinter support with installed python";
5637    fi
5638}
5639python_version ()
5640{
5641    [[ -n "${PYVER}" ]] && return 0;
5642    local tmpstr;
5643    python=${python:-/usr/bin/python};
5644    tmpstr="$(${python} -V 2>&1 )";
5645    export PYVER_ALL="${tmpstr#Python }";
5646    __python_version_extract $PYVER_ALL
5647}
5648raw-ldflags ()
5649{
5650    local x input="$@";
5651    [[ -z ${input} ]] && input=${LDFLAGS};
5652    set --;
5653    for x in ${input};
5654    do
5655        x=${x#-Wl,};
5656        set -- "$@" ${x//,/ };
5657    done;
5658    echo "$@"
5659}
5660replace-cpu-flags ()
5661{
5662    local newcpu="$#";
5663    newcpu="${!newcpu}";
5664    while [ $# -gt 1 ]; do
5665        replace-flags "-march=${1}" "-march=${newcpu}";
5666        replace-flags "-mcpu=${1}" "-mcpu=${newcpu}";
5667        replace-flags "-mtune=${1}" "-mtune=${newcpu}";
5668        shift;
5669    done;
5670    return 0
5671}
5672replace-flags ()
5673{
5674    [[ $# != 2 ]] && echo && eerror "Usage: replace-flags <old flag> <new flag>" && die "replace-flags takes 2 arguments, not $#";
5675    local f fset;
5676    declare -a new_CFLAGS new_CXXFLAGS new_FFLAGS new_FCFLAGS;
5677    for fset in CFLAGS CXXFLAGS FFLAGS FCFLAGS;
5678    do
5679        for f in ${!fset};
5680        do
5681            [[ ${f} == ${1} ]] && f=${2};
5682            eval new_${fset}\[\${\#new_${fset}\[@]}]=\${f};
5683        done;
5684        eval export ${fset}=\${new_${fset}\[*]};
5685    done;
5686    return 0
5687}
5688replace-sparc64-flags ()
5689{
5690    local SPARC64_CPUS="ultrasparc3 ultrasparc v9";
5691    if [ "${CFLAGS/mtune}" != "${CFLAGS}" ]; then
5692        for x in ${SPARC64_CPUS};
5693        do
5694            CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8}";
5695        done;
5696    else
5697        for x in ${SPARC64_CPUS};
5698        do
5699            CFLAGS="${CFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
5700        done;
5701    fi;
5702    if [ "${CXXFLAGS/mtune}" != "${CXXFLAGS}" ]; then
5703        for x in ${SPARC64_CPUS};
5704        do
5705            CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8}";
5706        done;
5707    else
5708        for x in ${SPARC64_CPUS};
5709        do
5710            CXXFLAGS="${CXXFLAGS/-mcpu=${x}/-mcpu=v8 -mtune=${x}}";
5711        done;
5712    fi;
5713    export CFLAGS CXXFLAGS
5714}
5715replace_all_version_separators ()
5716{
5717    __versionator_shopt_toggle on;
5718    local c;
5719    c=($(get_all_version_components "${2:-${PV}}" ));
5720    c="${c[@]//[-._]/$1}";
5721    echo ${c// };
5722    __versionator_shopt_toggle off
5723}
5724replace_version_separator ()
5725{
5726    __versionator_shopt_toggle on;
5727    local w i c found=0 v="${3:-${PV}}";
5728    w=${1:-1};
5729    c=($(get_all_version_components ${v} ));
5730    if [[ "${w//[[:digit:]]/}" == "${w}" ]]; then
5731        for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 ))
5732        do
5733            if [[ "${c[${i}]}" == "${w}" ]]; then
5734                c[${i}]="${2}";
5735                break;
5736            fi;
5737        done;
5738    else
5739        for ((i = 0 ; i < ${#c[@]} ; i = $i + 1 ))
5740        do
5741            if [[ -n "${c[${i}]//[^-._]}" ]]; then
5742                found=$(($found + 1));
5743                if [[ "$found" == "${w}" ]]; then
5744                    c[${i}]="${2}";
5745                    break;
5746                fi;
5747            fi;
5748        done;
5749    fi;
5750    c=${c[@]};
5751    echo ${c// };
5752    __versionator_shopt_toggle off
5753}
5754seq ()
5755{
5756    local p=$(type -P seq);
5757    case $# in
5758        1)
5759            min=1 max=$1 step=1
5760        ;;
5761        2)
5762            min=$1 max=$2 step=1
5763        ;;
5764        3)
5765            min=$1 max=$3 step=$2
5766        ;;
5767        *)
5768            die "seq called with wrong number of arguments"
5769        ;;
5770    esac;
5771    if [[ -z ${p} ]]; then
5772        local reps;
5773        if [[ ${step} != 0 ]]; then
5774            reps=$(( ($max-$min) / $step +1 ));
5775        else
5776            reps=0;
5777        fi;
5778        jot $reps $min $max $step;
5779    else
5780        "${p}" $min $step $max;
5781    fi
5782}
5783setup-allowed-flags ()
5784{
5785    if [[ -z ${ALLOWED_FLAGS} ]]; then
5786        export ALLOWED_FLAGS="-pipe";
5787        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -O -O0 -O1 -O2 -mcpu -march -mtune";
5788        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fstack-protector -fstack-protector-all";
5789        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fbounds-checking -fno-strict-overflow";
5790        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-PIE -fno-pie -fno-unit-at-a-time";
5791        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -g -g[0-9] -ggdb -ggdb[0-9] -gstabs -gstabs+";
5792        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-ident";
5793        export ALLOWED_FLAGS="${ALLOWED_FLAGS} -W* -w";
5794    fi;
5795    ALLOWED_FLAGS="${ALLOWED_FLAGS} -fno-stack-protector -fno-stack-protector-all               -fno-strict-aliasing -fno-bounds-checking -fstrict-overflow -fno-omit-frame-pointer";
5796    ALLOWED_FLAGS="${ALLOWED_FLAGS} -mregparm -mno-app-regs -mapp-regs          -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -mno-ssse3 -mno-sse4 -mno-sse4.1          -mno-sse4.2 -mno-avx -mno-aes -mno-pclmul -mno-sse4a -mno-3dnow                 -mno-popcnt -mno-abm            -mips1 -mips2 -mips3 -mips4 -mips32 -mips64 -mips16             -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 -m*-toc -D* -U*";
5797    export UNSTABLE_FLAGS="-Os -O3 -freorder-blocks";
5798    return 0
5799}
5800src_compile ()
5801{
5802    einfo;
5803    einfo "Building of core of Subversion";
5804    einfo;
5805    emake local-all || die "Building of core of Subversion failed";
5806    if use ctypes-python; then
5807        einfo;
5808        einfo "Building of Subversion Ctypes Python bindings";
5809        einfo;
5810        emake ctypes-python || die "Building of Subversion Ctypes Python bindings failed";
5811    fi;
5812    if use python; then
5813        einfo;
5814        einfo "Building of Subversion SWIG Python bindings";
5815        einfo;
5816        emake swig_pydir="$(python_get_sitedir)/libsvn" swig_pydir_extra="$(python_get_sitedir)/svn" swig-py || die "Building of Subversion SWIG Python bindings failed";
5817    fi;
5818    if use perl; then
5819        einfo;
5820        einfo "Building of Subversion SWIG Perl bindings";
5821        einfo;
5822        emake -j1 swig-pl || die "Building of Subversion SWIG Perl bindings failed";
5823    fi;
5824    if use ruby; then
5825        einfo;
5826        einfo "Building of Subversion SWIG Ruby bindings";
5827        einfo;
5828        emake swig-rb || die "Building of Subversion SWIG Ruby bindings failed";
5829    fi;
5830    if use java; then
5831        einfo;
5832        einfo "Building of Subversion JavaHL library";
5833        einfo;
5834        emake -j1 JAVAC_FLAGS="$(java-pkg_javac-args) -encoding iso8859-1" javahl || die "Building of Subversion JavaHL library failed";
5835    fi;
5836    if use emacs; then
5837        einfo;
5838        einfo "Compilation of Emacs modules";
5839        einfo;
5840        elisp-compile contrib/client-side/emacs/{dsvn,psvn,vc-svn}.el doc/svn-doc.el doc/tools/svnbook.el || die "Compilation of Emacs modules failed";
5841    fi;
5842    if use extras; then
5843        einfo;
5844        einfo "Building of contrib and tools";
5845        einfo;
5846        emake contrib || die "Building of contrib failed";
5847        emake tools || die "Building of tools failed";
5848    fi;
5849    if use doc; then
5850        einfo;
5851        einfo "Building of Subversion HTML documentation";
5852        einfo;
5853        doxygen doc/doxygen.conf || die "Building of Subversion HTML documentation failed";
5854        if use java; then
5855            einfo;
5856            einfo "Building of Subversion JavaHL library HTML documentation";
5857            einfo;
5858            emake doc-javahl || die "Building of Subversion JavaHL library HTML documentation failed";
5859        fi;
5860    fi
5861}
5862src_configure ()
5863{
5864    local myconf;
5865    if use python || use perl || use ruby; then
5866        myconf+=" --with-swig";
5867    else
5868        myconf+=" --without-swig";
5869    fi;
5870    if use java; then
5871        if use test && [[ -n "${SVN_TEST_BINDINGS}" ]]; then
5872            myconf+=" --with-junit=/usr/share/junit-4/lib/junit.jar";
5873        else
5874            myconf+=" --without-junit";
5875        fi;
5876    fi;
5877    econf --libdir="/usr/$(get_libdir)" $(use_with apache2 apxs "${APXS}") $(use_with berkdb berkeley-db "db.h:/usr/include/db${SVN_BDB_VERSION}::db-${SVN_BDB_VERSION}") $(use_with ctypes-python ctypesgen /usr) $(use_enable dso runtime-module-search) $(use_with gnome-keyring) $(use_enable java javahl) $(use_with java jdk "${JAVA_HOME}") $(use_enable nls) $(use_with sasl) $(use_with webdav-neon neon) $(use_with webdav-serf serf /usr) ${myconf} --with-apr=/usr/bin/apr-1-config --with-apr-util=/usr/bin/apu-1-config --disable-experimental-libtool --without-jikes --enable-local-library-preloading --disable-mod-activation --disable-neon-version-check --with-sqlite=/usr
5878}
5879src_install ()
5880{
5881    einfo;
5882    einfo "Installation of core of Subversion";
5883    einfo;
5884    emake -j1 DESTDIR="${D}" local-install || die "Installation of core of Subversion failed";
5885    if use ctypes-python; then
5886        einfo;
5887        einfo "Installation of Subversion Ctypes Python bindings";
5888        einfo;
5889        emake DESTDIR="${D}" install-ctypes-python || die "Installation of Subversion Ctypes Python bindings failed";
5890    fi;
5891    if use python; then
5892        einfo;
5893        einfo "Installation of Subversion SWIG Python bindings";
5894        einfo;
5895        emake -j1 DESTDIR="${D}" swig_pydir="$(python_get_sitedir)/libsvn" swig_pydir_extra="$(python_get_sitedir)/svn" install-swig-py || die "Installation of Subversion SWIG Python bindings failed";
5896    fi;
5897    if use perl; then
5898        einfo;
5899        einfo "Installation of Subversion SWIG Perl bindings";
5900        einfo;
5901        emake -j1 DESTDIR="${D}" INSTALLDIRS="vendor" install-swig-pl || die "Installation of Subversion SWIG Perl bindings failed";
5902        fixlocalpod;
5903        find "${D}" "(" -name .packlist -o -name "*.bs" ")" -print0 | xargs -0 rm -fr;
5904    fi;
5905    if use ruby; then
5906        einfo;
5907        einfo "Installation of Subversion SWIG Ruby bindings";
5908        einfo;
5909        emake -j1 DESTDIR="${D}" install-swig-rb || die "Installation of Subversion SWIG Ruby bindings failed";
5910    fi;
5911    if use java; then
5912        einfo;
5913        einfo "Installation of Subversion JavaHL library";
5914        einfo;
5915        emake -j1 DESTDIR="${D}" install-javahl || die "Installation of Subversion JavaHL library failed";
5916        java-pkg_regso "${D}"usr/$(get_libdir)/libsvnjavahl*.so;
5917        java-pkg_dojar "${D}"usr/$(get_libdir)/svn-javahl/svn-javahl.jar;
5918        rm -fr "${D}"usr/$(get_libdir)/svn-javahl/*.jar;
5919    fi;
5920    if use apache2; then
5921        dodir "${APACHE_MODULES_CONFDIR}";
5922        cat > "${D}${APACHE_MODULES_CONFDIR}"/47_mod_dav_svn.conf  <<EOF
5923<IfDefine SVN>
5924LoadModule dav_svn_module modules/mod_dav_svn.so
5925<IfDefine SVN_AUTHZ>
5926LoadModule authz_svn_module modules/mod_authz_svn.so
5927</IfDefine>
5928
5929# Example configuration:
5930#<Location /svn/repos>
5931#       DAV svn
5932#       SVNPath ${SVN_REPOS_LOC}/repos
5933#       AuthType Basic
5934#       AuthName "Subversion repository"
5935#       AuthUserFile ${SVN_REPOS_LOC}/conf/svnusers
5936#       Require valid-user
5937#</Location>
5938</IfDefine>
5939EOF
5940
5941    fi
5942    dobashcompletion tools/client-side/bash_completion subversion;
5943    rm -f tools/client-side/bash_completion;
5944    newbin tools/backup/hot-backup.py svn-hot-backup;
5945    rm -fr tools/backup;
5946    if use perl; then
5947        dobin contrib/client-side/svn_load_dirs/svn_load_dirs.pl;
5948    fi;
5949    rm -f contrib/client-side/svn_load_dirs/svn_load_dirs.pl;
5950    newinitd "${FILESDIR}"/svnserve.initd svnserve;
5951    if use apache2; then
5952        newconfd "${FILESDIR}"/svnserve.confd svnserve;
5953    else
5954        newconfd "${FILESDIR}"/svnserve.confd2 svnserve;
5955    fi;
5956    insinto /etc/xinetd.d;
5957    newins "${FILESDIR}"/svnserve.xinetd svnserve;
5958    dodoc CHANGES COMMITTERS README;
5959    dohtml www/hacking.html;
5960    dodoc tools/xslt/svnindex.{css,xsl};
5961    rm -fr tools/xslt;
5962    if use vim-syntax; then
5963        insinto /usr/share/vim/vimfiles/syntax;
5964        doins contrib/client-side/vim/svn.vim;
5965    fi;
5966    rm -f contrib/client-side/vim/svn.vim;
5967    if use emacs; then
5968        elisp-install ${PN} contrib/client-side/emacs/{dsvn,psvn}.{el,elc} doc/svn-doc.{el,elc} doc/tools/svnbook.{el,elc} || die "Installation of Emacs modules failed";
5969        elisp-install ${PN}/compat contrib/client-side/emacs/vc-svn.{el,elc} || die "Installation of Emacs modules failed";
5970        touch "${D}${SITELISP}/${PN}/compat/.nosearch";
5971        elisp-site-file-install "${FILESDIR}/70svn-gentoo.el" || die "Installation of Emacs site-init file failed";
5972    fi;
5973    rm -fr contrib/client-side/emacs;
5974    if use extras; then
5975        einfo;
5976        einfo "Installation of contrib and tools";
5977        einfo;
5978        cat > 80subversion-extras  <<EOF
5979PATH=/usr/$(get_libdir)/subversion/bin
5980ROOTPATH=/usr/$(get_libdir)/subversion/bin
5981EOF
5982
5983        doenvd 80subversion-extras;
5984        emake DESTDIR="${D}" contribdir="/usr/$(get_libdir)/subversion/bin" install-contrib || die "Installation of contrib failed";
5985        emake DESTDIR="${D}" toolsdir="/usr/$(get_libdir)/subversion/bin" install-tools || die "Installation of tools failed";
5986        find contrib tools "(" -name "*.bat" -o -name "*.in" -o -name ".libs" ")" -print0 | xargs -0 rm -fr;
5987        rm -fr contrib/client-side/svn-push;
5988        rm -fr contrib/server-side/svnstsw;
5989        rm -fr tools/client-side/svnmucc;
5990        rm -fr tools/server-side/{svn-populate-node-origins-index,svnauthz-validate}*;
5991        rm -fr tools/{buildbot,dev,diff,po};
5992        insinto /usr/share/${PN};
5993        doins -r contrib tools;
5994    fi;
5995    if use doc; then
5996        einfo;
5997        einfo "Installation of Subversion HTML documentation";
5998        einfo;
5999        dohtml doc/doxygen/html/* || die "Installation of Subversion HTML documentation failed";
6000        insinto /usr/share/doc/${PF};
6001        doins -r notes;
6002        ecompressdir /usr/share/doc/${PF}/notes;
6003        if use java; then
6004            java-pkg_dojavadoc doc/javadoc;
6005        fi;
6006    fi
6007}
6008src_prepare ()
6009{
6010    epatch "${FILESDIR}/${PN}-1.6.0-disable_linking_against_unneeded_libraries.patch";
6011    epatch "${FILESDIR}/${P}-fix_undefined_references.patch";
6012    epatch "${FILESDIR}/${P}-local_library_preloading.patch";
6013    chmod +x build/transform_libtool_scripts.sh || die "chmod failed";
6014    if ! use test; then
6015        sed -i -e "s/\(BUILD_RULES=.*\) bdb-test\(.*\)/\1\2/g" -e "s/\(BUILD_RULES=.*\) test\(.*\)/\1\2/g" configure.ac;
6016    fi;
6017    eautoconf;
6018    elibtoolize
6019}
6020src_test ()
6021{
6022    local fs_type fs_types ra_type ra_types options failed_tests;
6023    fs_types="fsfs";
6024    use berkdb && fs_types+=" bdb";
6025    ra_types="local svn";
6026    if [[ -n "${SVN_TEST_APACHE}" ]]; then
6027        use webdav-neon && ra_types+=" neon";
6028        use webdav-serf && ra_types+=" serf";
6029    fi;
6030    [[ -z "${SVN_TEST_SVNSERVE_PORT}" ]] && SVN_TEST_SVNSERVE_PORT="3690";
6031    if [[ -n "${SVN_TEST_FSFS_MEMCACHED}" ]]; then
6032        [[ -z "${SVN_TEST_FSFS_MEMCACHED_PORT}" ]] && SVN_TEST_FSFS_MEMCACHED_PORT="11211";
6033        sed -e "/\[memcached-servers\]/akey = 127.0.0.1:${SVN_TEST_FSFS_MEMCACHED_PORT}" -i subversion/tests/tests.conf;
6034    fi;
6035    if [[ -n "${SVN_TEST_FSFS_SHARDING}" ]]; then
6036        options+=" FSFS_SHARDING=${SVN_TEST_FSFS_SHARDING}";
6037    fi;
6038    if [[ -n "${SVN_TEST_FSFS_PACKING}" ]]; then
6039        options+=" FSFS_PACKING=1";
6040    fi;
6041    for ra_type in ${ra_types};
6042    do
6043        for fs_type in ${fs_types};
6044        do
6045            [[ "${ra_type}" == "local" && "${fs_type}" == "bdb" ]] && continue;
6046            einfo;
6047            einfo "\e[1;34mTesting of ra_${ra_type} + $(echo ${fs_type} | tr '[:lower:]' '[:upper:]')\e[0m";
6048            einfo;
6049            initialize_tests_environment ${ra_type};
6050            emake check FS_TYPE="${fs_type}" BASE_URL="${base_url}" HTTP_LIBRARY="${http_library}" CLEANUP="1" ${options} || failed_tests="1";
6051            terminate_tests_environment ${ra_type};
6052            mv tests.log tests-ra_${ra_type}-${fs_type}.log;
6053        done;
6054    done;
6055    unset base_url http_library;
6056    if [[ -n "${SVN_TEST_BINDINGS}" ]]; then
6057        local swig_lingua swig_linguas;
6058        local -A linguas;
6059        if use ctypes-python; then
6060            einfo;
6061            einfo "\e[1;34mTesting of Subversion Ctypes Python bindings\e[0m";
6062            einfo;
6063            emake check-ctypes-python || failed_tests="1";
6064        fi;
6065        use perl && swig_linguas+=" pl";
6066        use python && swig_linguas+=" py";
6067        use ruby && swig_linguas+=" rb";
6068        linguas[pl]="Perl";
6069        linguas[py]="Python";
6070        linguas[rb]="Ruby";
6071        for swig_lingua in ${swig_linguas};
6072        do
6073            einfo;
6074            einfo "\e[1;34mTesting of Subversion SWIG ${linguas[${swig_lingua}]} bindings\e[0m";
6075            einfo;
6076            emake check-swig-${swig_lingua} || failed_tests="1";
6077        done;
6078        if use java; then
6079            einfo;
6080            einfo "\e[1;34mTesting of Subversion JavaHL library\e[0m";
6081            einfo;
6082            emake check-javahl || failed_tests="1";
6083        fi;
6084    fi;
6085    if [[ -n "${failed_tests}" ]]; then
6086        ewarn;
6087        ewarn "\e[1;31mSome tests failed\e[0m";
6088        ewarn;
6089        ebeep 12;
6090    fi
6091}
6092src_unpack ()
6093{
6094    if use test && {
6095        use webdav-neon || use webdav-serf
6096    }; then
6097        create_apache_tests_configuration;
6098        elog;
6099        elog "Testing of mod_dav_svn, mod_authz_svn and libsvn_ra_neon / libsvn_ra_serf:";
6100        elog " If you want to test mod_dav_svn, mod_authz_svn and libsvn_ra_neon / libsvn_ra_serf,";
6101        elog " ensure that ${CATEGORY}/${PN} is installed with USE=\"apache2\",";
6102        elog " copy \"${T}/99_subversion_tests.conf\"";
6103        elog " to \"/etc/apache2/modules.d\" directory, add definitions of DAV, SVN, SVN_AUTHZ";
6104        elog " and SVN_TESTS to APACHE2_OPTS variable in \"/etc/conf.d/apache2\" configuration file,";
6105        elog " (re)start Apache and run \`SVN_TEST_APACHE=1 emerge ${CATEGORY}/${PN}\`.";
6106        elog;
6107        elog "\e[31m************************************************************************************************\e[0m";
6108        elog;
6109        if [[ -z "${SVN_TEST_APACHE}" ]]; then
6110            ebeep 6;
6111            epause 18;
6112        else
6113            if [[ ! -f "/etc/apache2/modules.d/99_subversion_tests.conf" ]]; then
6114                die "/etc/apache2/modules.d/99_subversion_tests.conf doesn't exist";
6115            fi;
6116            if ! cmp -s "${T}/99_subversion_tests.conf" "/etc/apache2/modules.d/99_subversion_tests.conf"; then
6117                die "/etc/apache2/modules.d/99_subversion_tests.conf mismatch";
6118            fi;
6119            epause 24;
6120        fi;
6121    fi;
6122    unpack ${A}
6123}
6124strip-flags ()
6125{
6126    local x y flag NEW_CFLAGS NEW_CXXFLAGS NEW_FFLAGS NEW_FCFLAGS;
6127    setup-allowed-flags;
6128    local NEW_CFLAGS="";
6129    local NEW_CXXFLAGS="";
6130    local NEW_FFLAGS="";
6131    local NEW_FCFLAGS="";
6132    if has ~$(tc-arch) ${ACCEPT_KEYWORDS}; then
6133        ALLOWED_FLAGS="${ALLOWED_FLAGS} ${UNSTABLE_FLAGS}";
6134    fi;
6135    set -f;
6136    for x in ${CFLAGS};
6137    do
6138        for y in ${ALLOWED_FLAGS};
6139        do
6140            flag=${x%%=*};
6141            if [ "${flag%%${y}}" = "" ]; then
6142                NEW_CFLAGS="${NEW_CFLAGS} ${x}";
6143                break;
6144            fi;
6145        done;
6146    done;
6147    for x in ${CXXFLAGS};
6148    do
6149        for y in ${ALLOWED_FLAGS};
6150        do
6151            flag=${x%%=*};
6152            if [ "${flag%%${y}}" = "" ]; then
6153                NEW_CXXFLAGS="${NEW_CXXFLAGS} ${x}";
6154                break;
6155            fi;
6156        done;
6157    done;
6158    for x in ${FFLAGS};
6159    do
6160        for y in ${ALLOWED_FLAGS};
6161        do
6162            flag=${x%%=*};
6163            if [ "${flag%%${y}}" = "" ]; then
6164                NEW_FFLAGS="${NEW_FFLAGS} ${x}";
6165                break;
6166            fi;
6167        done;
6168    done;
6169    for x in ${FCFLAGS};
6170    do
6171        for y in ${ALLOWED_FLAGS};
6172        do
6173            flag=${x%%=*};
6174            if [ "${flag%%${y}}" = "" ]; then
6175                NEW_FCFLAGS="${NEW_FCFLAGS} ${x}";
6176                break;
6177            fi;
6178        done;
6179    done;
6180    if [ "${CFLAGS/-O}" != "${CFLAGS}" -a "${NEW_CFLAGS/-O}" = "${NEW_CFLAGS}" ]; then
6181        NEW_CFLAGS="${NEW_CFLAGS} -O2";
6182    fi;
6183    if [ "${CXXFLAGS/-O}" != "${CXXFLAGS}" -a "${NEW_CXXFLAGS/-O}" = "${NEW_CXXFLAGS}" ]; then
6184        NEW_CXXFLAGS="${NEW_CXXFLAGS} -O2";
6185    fi;
6186    if [ "${FFLAGS/-O}" != "${FFLAGS}" -a "${NEW_FFLAGS/-O}" = "${NEW_FFLAGS}" ]; then
6187        NEW_FFLAGS="${NEW_FFLAGS} -O2";
6188    fi;
6189    if [ "${FCFLAGS/-O}" != "${FCFLAGS}" -a "${NEW_FCFLAGS/-O}" = "${NEW_FCFLAGS}" ]; then
6190        NEW_FCFLAGS="${NEW_FCFLAGS} -O2";
6191    fi;
6192    set +f;
6193    export CFLAGS="${NEW_CFLAGS}";
6194    export CXXFLAGS="${NEW_CXXFLAGS}";
6195    export FFLAGS="${NEW_FFLAGS}";
6196    export FCFLAGS="${NEW_FCFLAGS}";
6197    return 0
6198}
6199strip-linguas ()
6200{
6201    local ls newls nols;
6202    if [[ $1 == "-i" ]] || [[ $1 == "-u" ]]; then
6203        local op=$1;
6204        shift;
6205        ls=$(find "$1" -name '*.po' -exec basename {} .po ';');
6206        shift;
6207        local d f;
6208        for d in "$@";
6209        do
6210            if [[ ${op} == "-u" ]]; then
6211                newls=${ls};
6212            else
6213                newls="";
6214            fi;
6215            for f in $(find "$d" -name '*.po' -exec basename {} .po ';');
6216            do
6217                if [[ ${op} == "-i" ]]; then
6218                    hasq ${f} ${ls} && newls="${newls} ${f}";
6219                else
6220                    hasq ${f} ${ls} || newls="${newls} ${f}";
6221                fi;
6222            done;
6223            ls=${newls};
6224        done;
6225    else
6226        ls="$@";
6227    fi;
6228    nols="";
6229    newls="";
6230    for f in ${LINGUAS};
6231    do
6232        if hasq ${f} ${ls}; then
6233            newls="${newls} ${f}";
6234        else
6235            nols="${nols} ${f}";
6236        fi;
6237    done;
6238    [[ -n ${nols} ]] && ewarn "Sorry, but ${PN} does not support the LINGUAS:" ${nols};
6239    export LINGUAS=${newls:1}
6240}
6241strip-unsupported-flags ()
6242{
6243    export CFLAGS=$(test-flags-CC ${CFLAGS});
6244    export CXXFLAGS=$(test-flags-CXX ${CXXFLAGS});
6245    export FFLAGS=$(test-flags-F77 ${FFLAGS});
6246    export FCFLAGS=$(test-flags-FC ${FCFLAGS})
6247}
6248tc-arch ()
6249{
6250    tc-ninja_magic_to_arch portage "$@"
6251}
6252tc-arch-kernel ()
6253{
6254    tc-ninja_magic_to_arch kern "$@"
6255}
6256tc-endian ()
6257{
6258    local host=$1;
6259    [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
6260    host=${host%%-*};
6261    case ${host} in
6262        alpha*)
6263            echo big
6264        ;;
6265        arm*b*)
6266            echo big
6267        ;;
6268        arm*)
6269            echo little
6270        ;;
6271        cris*)
6272            echo little
6273        ;;
6274        hppa*)
6275            echo big
6276        ;;
6277        i?86*)
6278            echo little
6279        ;;
6280        ia64*)
6281            echo little
6282        ;;
6283        m68*)
6284            echo big
6285        ;;
6286        mips*l*)
6287            echo little
6288        ;;
6289        mips*)
6290            echo big
6291        ;;
6292        powerpc*)
6293            echo big
6294        ;;
6295        s390*)
6296            echo big
6297        ;;
6298        sh*b*)
6299            echo big
6300        ;;
6301        sh*)
6302            echo little
6303        ;;
6304        sparc*)
6305            echo big
6306        ;;
6307        x86_64*)
6308            echo little
6309        ;;
6310        *)
6311            echo wtf
6312        ;;
6313    esac
6314}
6315tc-export ()
6316{
6317    local var;
6318    for var in "$@";
6319    do
6320        [[ $(type -t tc-get${var}) != "function" ]] && die "tc-export: invalid export variable '${var}'";
6321        eval tc-get${var} > /dev/null;
6322    done
6323}
6324tc-getAR ()
6325{
6326    tc-getPROG AR ar "$@"
6327}
6328tc-getAS ()
6329{
6330    tc-getPROG AS as "$@"
6331}
6332tc-getBUILD_CC ()
6333{
6334    local v;
6335    for v in CC_FOR_BUILD BUILD_CC HOSTCC;
6336    do
6337        if [[ -n ${!v} ]]; then
6338            export BUILD_CC=${!v};
6339            echo "${!v}";
6340            return 0;
6341        fi;
6342    done;
6343    local search=;
6344    if [[ -n ${CBUILD} ]]; then
6345        search=$(type -p ${CBUILD}-gcc);
6346        search=${search##*/};
6347    fi;
6348    search=${search:-gcc};
6349    export BUILD_CC=${search};
6350    echo "${search}"
6351}
6352tc-getCC ()
6353{
6354    tc-getPROG CC gcc "$@"
6355}
6356tc-getCPP ()
6357{
6358    tc-getPROG CPP cpp "$@"
6359}
6360tc-getCXX ()
6361{
6362    tc-getPROG CXX g++ "$@"
6363}
6364tc-getF77 ()
6365{
6366    tc-getPROG F77 f77 "$@"
6367}
6368tc-getFC ()
6369{
6370    tc-getPROG FC gfortran "$@"
6371}
6372tc-getGCJ ()
6373{
6374    tc-getPROG GCJ gcj "$@"
6375}
6376tc-getLD ()
6377{
6378    tc-getPROG LD ld "$@"
6379}
6380tc-getNM ()
6381{
6382    tc-getPROG NM nm "$@"
6383}
6384tc-getOBJCOPY ()
6385{
6386    tc-getPROG OBJCOPY objcopy "$@"
6387}
6388tc-getPROG ()
6389{
6390    local var=$1;
6391    local prog=$2;
6392    if [[ -n ${!var} ]]; then
6393        echo "${!var}";
6394        return 0;
6395    fi;
6396    local search=;
6397    [[ -n $3 ]] && search=$(type -p "$3-${prog}");
6398    [[ -z ${search} && -n ${CHOST} ]] && search=$(type -p "${CHOST}-${prog}");
6399    [[ -n ${search} ]] && prog=${search##*/};
6400    export ${var}=${prog};
6401    echo "${!var}"
6402}
6403tc-getRANLIB ()
6404{
6405    tc-getPROG RANLIB ranlib "$@"
6406}
6407tc-getSTRIP ()
6408{
6409    tc-getPROG STRIP strip "$@"
6410}
6411tc-is-cross-compiler ()
6412{
6413    return $([[ ${CBUILD:-${CHOST}} != ${CHOST} ]])
6414}
6415tc-is-softfloat ()
6416{
6417    case ${CTARGET} in
6418        bfin* | h8300*)
6419            echo "only"
6420        ;;
6421        *)
6422            [[ ${CTARGET//_/-} == *-softfloat-* ]] && echo "yes" || echo "no"
6423        ;;
6424    esac
6425}
6426tc-is-static-only ()
6427{
6428    local host=${CTARGET:-${CHOST}};
6429    return $([[ ${host} == *-mint* ]])
6430}
6431tc-ninja_magic_to_arch ()
6432{
6433    function ninj ()
6434    {
6435        [[ ${type} == "kern" ]] && echo $1 || echo $2
6436    };
6437    local type=$1;
6438    local host=$2;
6439    [[ -z ${host} ]] && host=${CTARGET:-${CHOST}};
6440    case ${host} in
6441        alpha*)
6442            echo alpha
6443        ;;
6444        arm*)
6445            echo arm
6446        ;;
6447        avr*)
6448            ninj avr32 avr
6449        ;;
6450        bfin*)
6451            ninj blackfin bfin
6452        ;;
6453        cris*)
6454            echo cris
6455        ;;
6456        hppa*)
6457            ninj parisc hppa
6458        ;;
6459        i?86*)
6460            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -lt $(KV_to_int 2.6.24) || ${host} == *freebsd* ]]; then
6461                echo i386;
6462            else
6463                echo x86;
6464            fi
6465        ;;
6466        ia64*)
6467            echo ia64
6468        ;;
6469        m68*)
6470            echo m68k
6471        ;;
6472        mips*)
6473            echo mips
6474        ;;
6475        nios2*)
6476            echo nios2
6477        ;;
6478        nios*)
6479            echo nios
6480        ;;
6481        powerpc*)
6482            if [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.16) ]] && [[ ${type} == "kern" ]]; then
6483                echo powerpc;
6484            else
6485                if [[ $(KV_to_int ${KV}) -eq $(KV_to_int 2.6.15) ]] && [[ ${type} == "kern" ]]; then
6486                    if [[ ${host} == powerpc64* ]] || [[ ${PROFILE_ARCH} == "ppc64" ]]; then
6487                        echo powerpc;
6488                    else
6489                        echo ppc;
6490                    fi;
6491                else
6492                    if [[ ${host} == powerpc64* ]]; then
6493                        echo ppc64;
6494                    else
6495                        if [[ ${PROFILE_ARCH} == "ppc64" ]]; then
6496                            ninj ppc64 ppc;
6497                        else
6498                            echo ppc;
6499                        fi;
6500                    fi;
6501                fi;
6502            fi
6503        ;;
6504        s390*)
6505            echo s390
6506        ;;
6507        sh64*)
6508            ninj sh64 sh
6509        ;;
6510        sh*)
6511            echo sh
6512        ;;
6513        sparc64*)
6514            ninj sparc64 sparc
6515        ;;
6516        sparc*)
6517            [[ ${PROFILE_ARCH} == "sparc64" ]] && ninj sparc64 sparc || echo sparc
6518        ;;
6519        vax*)
6520            echo vax
6521        ;;
6522        x86_64*)
6523            if [[ ${type} == "kern" ]] && [[ $(KV_to_int ${KV}) -ge $(KV_to_int 2.6.24) ]]; then
6524                echo x86;
6525            else
6526                ninj x86_64 amd64;
6527            fi
6528        ;;
6529        *)
6530            echo unknown
6531        ;;
6532    esac
6533}
6534terminate_tests_environment ()
6535{
6536    [[ "$1" == "svn" ]] && kill "$(<"${T}/svnserve.pid")";
6537    [[ -n "${SVN_TEST_FSFS_MEMCACHED}" ]] && kill "$(<"${T}/memcached.pid")"
6538}
6539test-flag-CC ()
6540{
6541    test-flag-PROG "CC" "$1"
6542}
6543test-flag-CXX ()
6544{
6545    test-flag-PROG "CXX" "$1"
6546}
6547test-flag-F77 ()
6548{
6549    test-flag-PROG "F77" "$1"
6550}
6551test-flag-FC ()
6552{
6553    test-flag-PROG "FC" "$1"
6554}
6555test-flag-PROG ()
6556{
6557    local comp=$1;
6558    local flags="$2";
6559    [[ -z ${comp} || -z ${flags} ]] && return 1;
6560    local PROG=$(tc-get${comp});
6561    ${PROG} ${flags} -S -o /dev/null -xc /dev/null > /dev/null 2>&1
6562}
6563test-flags ()
6564{
6565    test-flags-CC "$@"
6566}
6567test-flags-CC ()
6568{
6569    test-flags-PROG "CC" "$@"
6570}
6571test-flags-CXX ()
6572{
6573    test-flags-PROG "CXX" "$@"
6574}
6575test-flags-F77 ()
6576{
6577    test-flags-PROG "F77" "$@"
6578}
6579test-flags-FC ()
6580{
6581    test-flags-PROG "FC" "$@"
6582}
6583test-flags-PROG ()
6584{
6585    local comp=$1;
6586    local flags;
6587    local x;
6588    shift;
6589    [[ -z ${comp} ]] && return 1;
6590    x="";
6591    for x in "$@";
6592    do
6593        test-flag-${comp} "${x}" && flags="${flags}${flags:+ }${x}";
6594    done;
6595    echo "${flags}";
6596    [[ -n ${flags} ]]
6597}
6598test_flag ()
6599{
6600    ewarn "test_flag: deprecated, please use test-flags()!" 1>&2;
6601    test-flags-CC "$@"
6602}
6603test_version_info ()
6604{
6605    if [[ $($(tc-getCC) --version 2>&1) == *$1* ]]; then
6606        return 0;
6607    else
6608        return 1;
6609    fi
6610}
6611treecopy ()
6612{
6613    dest=${!#};
6614    files_count=$#;
6615    while (( $# > 1 )); do
6616        dirstruct=$(dirname "$1");
6617        mkdir -p "${dest}/${dirstruct}";
6618        cp -pPR "$1" "${dest}/${dirstruct}";
6619        shift;
6620    done
6621}
6622uclibctoolize ()
6623{
6624    ewarn "uclibctoolize() is deprecated, please just use elibtoolize()!";
6625    elibtoolize
6626}
6627unpack_makeself ()
6628{
6629    local src_input=${1:-${A}};
6630    local src=$(find_unpackable_file "${src_input}");
6631    local skip=$2;
6632    local exe=$3;
6633    [[ -z ${src} ]] && die "Could not locate source for '${src_input}'";
6634    local shrtsrc=$(basename "${src}");
6635    echo ">>> Unpacking ${shrtsrc} to ${PWD}";
6636    if [[ -z ${skip} ]]; then
6637        local ver=$(grep -a '#.*Makeself' "${src}" | awk '{print $NF}');
6638        local skip=0;
6639        exe=tail;
6640        case ${ver} in
6641            1.5.* | 1.6.0-nv)
6642                skip=$(grep -a ^skip= "${src}" | cut -d= -f2)
6643            ;;
6644            2.0 | 2.0.1)
6645                skip=$(grep -a ^'       'tail "${src}" | awk '{print $2}' | cut -b2-)
6646            ;;
6647            2.1.1)
6648                skip=$(grep -a ^offset= "${src}" | awk '{print $2}' | cut -b2-);
6649                let skip="skip + 1"
6650            ;;
6651            2.1.2)
6652                skip=$(grep -a ^offset= "${src}" | awk '{print $3}' | head -n 1);
6653                let skip="skip + 1"
6654            ;;
6655            2.1.3)
6656                skip=`grep -a ^offset= "${src}" | awk '{print $3}'`;
6657                let skip="skip + 1"
6658            ;;
6659            2.1.4 | 2.1.5)
6660                skip=$(grep -a offset=.*head.*wc "${src}" | awk '{print $3}' | head -n 1);
6661                skip=$(head -n ${skip} "${src}" | wc -c);
6662                exe="dd"
6663            ;;
6664            *)
6665                eerror "I'm sorry, but I was unable to support the Makeself file.";
6666                eerror "The version I detected was '${ver}'.";
6667                eerror "Please file a bug about the file ${shrtsrc} at";
6668                eerror "http://bugs.gentoo.org/ so that support can be added.";
6669                die "makeself version '${ver}' not supported"
6670            ;;
6671        esac;
6672        debug-print "Detected Makeself version ${ver} ... using ${skip} as offset";
6673    fi;
6674    case ${exe} in
6675        tail)
6676            exe="tail -n +${skip} '${src}'"
6677        ;;
6678        dd)
6679            exe="dd ibs=${skip} skip=1 obs=1024 conv=sync if='${src}'"
6680        ;;
6681        *)
6682            die "makeself cant handle exe '${exe}'"
6683        ;;
6684    esac;
6685    local tmpfile=$(emktemp);
6686    eval ${exe} 2> /dev/null | head -c 512 > "${tmpfile}";
6687    local filetype=$(file -b "${tmpfile}");
6688    case ${filetype} in
6689        *tar\ archive*)
6690            eval ${exe} | tar --no-same-owner -xf -
6691        ;;
6692        bzip2*)
6693            eval ${exe} | bzip2 -dc | tar --no-same-owner -xf -
6694        ;;
6695        gzip*)
6696            eval ${exe} | tar --no-same-owner -xzf -
6697        ;;
6698        compress*)
6699            eval ${exe} | gunzip | tar --no-same-owner -xf -
6700        ;;
6701        *)
6702            eerror "Unknown filetype \"${filetype}\" ?";
6703            false
6704        ;;
6705    esac;
6706    _pipestatus="${PIPESTATUS[*]}";
6707    [[ "${_pipestatus// /}" -eq 0 ]] || die "failure unpacking (${filetype}) makeself ${shrtsrc} ('${ver}' +${skip})"
6708}
6709unpack_pdv ()
6710{
6711    local src=$(find_unpackable_file "$1");
6712    local sizeoff_t=$2;
6713    [[ -z ${src} ]] && die "Could not locate source for '$1'";
6714    [[ -z ${sizeoff_t} ]] && die "No idea what off_t size was used for this pdv :(";
6715    local shrtsrc=$(basename "${src}");
6716    echo ">>> Unpacking ${shrtsrc} to ${PWD}";
6717    local metaskip=$(tail -c ${sizeoff_t} "${src}" | hexdump -e \"%i\");
6718    local tailskip=$(tail -c $((${sizeoff_t}*2)) "${src}" | head -c ${sizeoff_t} | hexdump -e \"%i\");
6719    local metafile=$(emktemp);
6720    tail -c +$((${metaskip}+1)) "${src}" > "${metafile}";
6721    local datafile=$(tail -c +$((${metaskip}+1)) "${src}" | strings | head -n 1);
6722    datafile=$(basename "${datafile}");
6723    local tmpfile=$(emktemp);
6724    tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c 512 > ${tmpfile};
6725    local iscompressed=$(file -b "${tmpfile}");
6726    if [[ ${iscompressed:0:8} == "compress" ]]; then
6727        iscompressed=1;
6728        mv ${tmpfile}{,.Z};
6729        gunzip ${tmpfile};
6730    else
6731        iscompressed=0;
6732    fi;
6733    local istar=$(file -b "${tmpfile}");
6734    if [[ ${istar:0:9} == "POSIX tar" ]]; then
6735        istar=1;
6736    else
6737        istar=0;
6738    fi;
6739    if [ ${iscompressed} -eq 1 ]; then
6740        if [ ${istar} -eq 1 ]; then
6741            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar -xzf -;
6742        else
6743            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | gzip -dc > ${datafile};
6744        fi;
6745    else
6746        if [ ${istar} -eq 1 ]; then
6747            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) | tar --no-same-owner -xf -;
6748        else
6749            tail -c +$((${tailskip}+1)) ${src} 2> /dev/null | head -c $((${metaskip}-${tailskip})) > ${datafile};
6750        fi;
6751    fi;
6752    true
6753}
6754use_doc ()
6755{
6756    use doc && echo ${@:-javadoc}
6757}
6758validate_desktop_entries ()
6759{
6760    if [[ -x /usr/bin/desktop-file-validate ]]; then
6761        einfo "Checking desktop entry validity";
6762        local directories="";
6763        for d in /usr/share/applications $@;
6764        do
6765            [[ -d ${D}${d} ]] && directories="${directories} ${D}${d}";
6766        done;
6767        if [[ -n ${directories} ]]; then
6768            for FILE in $(find ${directories} -name "*\.desktop"                                                        -not -path '*.hidden*' | sort -u 2>/dev/null);
6769            do
6770                local temp=$(desktop-file-validate ${FILE} | grep -v "warning:" |                                                               sed -e "s|error: ||" -e "s|${FILE}:|--|g" );
6771                [[ -n $temp ]] && elog ${temp/--/${FILE/${D}/}:};
6772            done;
6773        fi;
6774        echo "";
6775    else
6776        einfo "Passing desktop entry validity check. Install dev-util/desktop-file-utils, if you want to help to improve Gentoo.";
6777    fi
6778}
6779version_compare ()
6780{
6781    __versionator_shopt_toggle on;
6782    local ver_a=${1} ver_b=${2} parts_a parts_b cur_idx_a=0 cur_idx_b=0;
6783    parts_a=($(get_all_version_components "${ver_a}" ));
6784    parts_b=($(get_all_version_components "${ver_b}" ));
6785    local inf_loop=0;
6786    while true; do
6787        inf_loop=$(( ${inf_loop} + 1 ));
6788        [[ ${inf_loop} -gt 20 ]] && die "versionator compare bug [numbers, ${ver_a}, ${ver_b}]";
6789        local cur_tok_a=${parts_a[${cur_idx_a}]};
6790        local cur_tok_b=${parts_b[${cur_idx_b}]};
6791        if [[ -n ${cur_tok_a} ]] && [[ -z ${cur_tok_a//[[:digit:]]} ]]; then
6792            cur_idx_a=$(( ${cur_idx_a} + 1 ));
6793            [[ ${parts_a[${cur_idx_a}]} == "." ]] && cur_idx_a=$(( ${cur_idx_a} + 1 ));
6794        else
6795            cur_tok_a="";
6796        fi;
6797        if [[ -n ${cur_tok_b} ]] && [[ -z ${cur_tok_b//[[:digit:]]} ]]; then
6798            cur_idx_b=$(( ${cur_idx_b} + 1 ));
6799            [[ ${parts_b[${cur_idx_b}]} == "." ]] && cur_idx_b=$(( ${cur_idx_b} + 1 ));
6800        else
6801            cur_tok_b="";
6802        fi;
6803        [[ -z ${cur_tok_a} ]] && [[ -z ${cur_tok_b} ]] && break;
6804        cur_tok_a=${cur_tok_a##+(0)};
6805        cur_tok_b=${cur_tok_b##+(0)};
6806        [[ -z ${cur_tok_a} ]] && cur_tok_a=0;
6807        [[ -z ${cur_tok_b} ]] && cur_tok_b=0;
6808        [[ ${cur_tok_a} -lt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 1;
6809        [[ ${cur_tok_a} -gt ${cur_tok_b} ]] && __versionator_shopt_toggle off && return 3;
6810    done;
6811    local letter_a=;
6812    letter_a=${parts_a[${cur_idx_a}]};
6813    if [[ ${#letter_a} -eq 1 ]] && [[ -z ${letter_a/[a-z]} ]]; then
6814        cur_idx_a=$(( ${cur_idx_a} + 1 ));
6815    else
6816        letter_a="@";
6817    fi;
6818    local letter_b=;
6819    letter_b=${parts_b[${cur_idx_b}]};
6820    if [[ ${#letter_b} -eq 1 ]] && [[ -z ${letter_b/[a-z]} ]]; then
6821        cur_idx_b=$(( ${cur_idx_b} + 1 ));
6822    else
6823        letter_b="@";
6824    fi;
6825    [[ ${letter_a} < ${letter_b} ]] && __versionator_shopt_toggle off && return 1;
6826    [[ ${letter_a} > ${letter_b} ]] && __versionator_shopt_toggle off && return 3;
6827    local suffix rule part r_lt r_gt;
6828    for rule in "alpha=1" "beta=1" "pre=1" "rc=1" "p=3" "r=3";
6829    do
6830        suffix=${rule%%=*};
6831        r_lt=${rule##*=};
6832        [[ ${r_lt} -eq 1 ]] && r_gt=3 || r_gt=1;
6833        local suffix_a=;
6834        for part in ${parts_a[@]};
6835        do
6836            [[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_a=${part#${suffix}}0;
6837        done;
6838        local suffix_b=;
6839        for part in ${parts_b[@]};
6840        do
6841            [[ ${part#${suffix}} != ${part} ]] && [[ -z ${part##${suffix}*([[:digit:]])} ]] && suffix_b=${part#${suffix}}0;
6842        done;
6843        [[ -z ${suffix_a} ]] && [[ -z ${suffix_b} ]] && continue;
6844        [[ -z ${suffix_a} ]] && __versionator_shopt_toggle off && return ${r_gt};
6845        [[ -z ${suffix_b} ]] && __versionator_shopt_toggle off && return ${r_lt};
6846        suffix_a=${suffix_a##+(0)};
6847        suffix_a=${suffix_a:-0};
6848        suffix_b=${suffix_b##+(0)};
6849        suffix_b=${suffix_b:-0};
6850        [[ ${suffix_a} -lt ${suffix_b} ]] && __versionator_shopt_toggle off && return 1;
6851        [[ ${suffix_a} -gt ${suffix_b} ]] && __versionator_shopt_toggle off && return 3;
6852    done;
6853    __versionator_shopt_toggle off;
6854    return 2
6855}
6856version_is_at_least ()
6857{
6858    __versionator_shopt_toggle on;
6859    local want_s="$1" have_s="${2:-${PVR}}" r;
6860    version_compare "${want_s}" "${have_s}";
6861    r=$?;
6862    case $r in
6863        1 | 2)
6864            __versionator_shopt_toggle off;
6865            return 0
6866        ;;
6867        3)
6868            __versionator_shopt_toggle off;
6869            return 1
6870        ;;
6871        *)
6872            __versionator_shopt_toggle off;
6873            die "versionator compare bug [atleast, ${want_s}, ${have_s}, ${r}]"
6874        ;;
6875    esac;
6876    __versionator_shopt_toggle off
6877}
6878version_sort ()
6879{
6880    __versionator_shopt_toggle on;
6881    local items= left=0;
6882    items=($@);
6883    while [[ ${left} -lt ${#items[@]} ]]; do
6884        local lowest_idx=${left};
6885        local idx=$(( ${lowest_idx} + 1 ));
6886        while [[ ${idx} -lt ${#items[@]} ]]; do
6887            version_compare "${items[${lowest_idx}]}" "${items[${idx}]}";
6888            [[ $? -eq 3 ]] && lowest_idx=${idx};
6889            idx=$(( ${idx} + 1 ));
6890        done;
6891        local tmp=${items[${lowest_idx}]};
6892        items[${lowest_idx}]=${items[${left}]};
6893        items[${left}]=${tmp};
6894        left=$(( ${left} + 1 ));
6895    done;
6896    echo ${items[@]};
6897    __versionator_shopt_toggle off
6898}
6899want_apache ()
6900{
6901    debug-print-function $FUNCNAME $*;
6902    want_apache2 "$@"
6903}
6904want_apache2 ()
6905{
6906    debug-print-function $FUNCNAME $*;
6907    local myiuse=${1:-apache2};
6908    IUSE="${IUSE} ${myiuse}";
6909    DEPEND="${DEPEND} ${myiuse}? ( ${APACHE2_DEPEND} )";
6910    RDEPEND="${RDEPEND} ${myiuse}? ( ${APACHE2_DEPEND} )"
6911}
6912want_apache2_2 ()
6913{
6914    debug-print-function $FUNCNAME $*;
6915    local myiuse=${1:-apache2};
6916    IUSE="${IUSE} ${myiuse}";
6917    DEPEND="${DEPEND} ${myiuse}? ( ${APACHE2_2_DEPEND} )";
6918    RDEPEND="${RDEPEND} ${myiuse}? ( ${APACHE2_2_DEPEND} )"
6919}
6920declare -x ALSA_CARDS=""
6921declare -x ALSA_PCM_PLUGINS="adpcm alaw asym copy dmix dshare dsnoop empty extplug file hooks iec958 ioplug ladspa lfloat linear meter mmap_emul mulaw multi null plug rate route share shm softvol"
6922declare -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"
6923declare -x ARCH="arm"
6924declare -x CBUILD="armv4tl-softfloat-linux-gnueabi"
6925declare -x CDEFINE_default="__unix__"
6926declare -x CFLAGS="-Os -march=armv4t -pipe -fno-strict-aliasing"
6927declare -x CFLAGS_default=""
6928declare -x CHOST="armv4tl-softfloat-linux-gnueabi"
6929declare -x CHOST_default="armv4tl-softfloat-linux-gnueabi"
6930declare -x CROSSCOMPILE_OPTS=""
6931declare -x CTARGET_default="armv4tl-softfloat-linux-gnueabi"
6932declare -x CVS_RSH="ssh"
6933declare -x CXXFLAGS="-Os -march=armv4t -pipe -fno-strict-aliasing"
6934declare -x DEFAULT_ABI="default"
6935declare -x DESTTREE="/usr"
6936declare -x DIROPTIONS="-m0755"
6937declare -x EAPI="2"
6938declare -x ELIBC="glibc"
6939declare -x ELT_APPLIED_PATCHES=" 1.5.10 1.5.6 1.5.26"
6940declare -x ELT_LTMAIN_SH="/var/tmp/portage/dev-util/subversion-1.6.2/work/subversion-1.6.2/build/ltmain.sh"
6941declare -x EXEOPTIONS="-m0755"
6942declare -x FCFLAGS=" -fno-strict-aliasing"
6943declare -x FEATURES="distlocks fixpackages parallel-fetch protect-owned sandbox sfperms strict unmerge-orphans userfetch"
6944declare -x FFLAGS=" -fno-strict-aliasing"
6945declare -x GCC_SPECS=""
6946declare -x HISTFILESIZE="1000"
6947declare -x HISTSIZE="1000"
6948declare -x INHERITED="autotools multilib elisp-common portability flag-o-matic python java-utils-2 versionator alternatives bash-completion java-pkg-opt-2 base libtool toolchain-funcs db-use depend.apache eutils perl-module"
6949declare -x INPUT_DEVICES=""
6950declare -x INSDESTTREE=""
6951declare -x INSOPTIONS="-m0644"
6952declare -x KERNEL="linux"
6953declare -x KERNEL_ABI="default"
6954declare -x KEYWORDS="alpha amd64 arm hppa ia64 ~ppc ~ppc64 s390 sh sparc x86"
6955declare -x KV=""
6956declare -x LCD_DEVICES=""
6957declare -x LDFLAGS="-Wl,-O1"
6958declare -x LDFLAGS_default=""
6959declare -x LIBDIR_default="lib"
6960declare -x LIBOPTIONS="-m0644"
6961declare -x LICENSE="Subversion"
6962declare -x MULTILIB_ABIS="default"
6963declare -x NETBEANS="apisupport cnd groovy gsf harness ide identity j2ee java mobility nb php profiler soa visualweb webcommon websvccommon xml"
6964declare -x PORTAGE_COMPRESS_EXCLUDE_SUFFIXES="css gif htm[l]? jp[e]?g js pdf png"
6965declare -x PROFILE_ONLY_VARIABLES="ARCH ELIBC KERNEL USERLAND"
6966declare -x PROPERTIES=""
6967declare -x PROVIDE=""
6968declare -x PYTHONDONTWRITEBYTECODE="1"
6969declare -x PYTHON_DONTCOMPILE="1"
6970declare -x RESTRICT=""
6971declare -x S="/var/tmp/portage/dev-util/subversion-1.6.2/work/subversion-1.6.2"
6972declare -x SANDBOX_DEBUG="0"
6973declare -x SANDBOX_DENY="/etc/ld.so.preload"
6974declare -x SANDBOX_PID="17346"
6975declare -x SANDBOX_PREDICT="/dev/console:/dev/crypto:/dev/random:/proc/self/maps:/var/tmp/portage/dev-util/subversion-1.6.2/homedir"
6976declare -x SANDBOX_READ="/:/dev/shm:/dev/stdin:/var/tmp"
6977declare -x SANDBOX_VERBOSE="1"
6978declare -x SANDBOX_WRITE=":/dev/console:/dev/fd:/dev/full:/dev/null:/dev/pts/:/dev/pty:/dev/shm:/dev/stderr:/dev/stdout:/dev/tts:/dev/tty:/dev/vc/:/dev/zero:/proc/self/fd:/tmp/:/usr/lib/cf:/usr/lib/conftest:/usr/lib32/cf:/usr/lib32/conftest:/usr/lib64/cf:/usr/lib64/conftest:/usr/tmp/cf:/usr/tmp/conftest:/var/tmp:/var/tmp/:/var/tmp/portage/dev-util/subversion-1.6.2/homedir/.bash_history"
6979declare -x SLOT="0"
6980declare -x TSLIB_TSDEVICE="/dev/input/touchscreen0"
6981declare -x USE="arm berkdb dso elibc_glibc kernel_linux nls perl python userland_GNU webdav-neon"
6982declare -x USERLAND="GNU"
6983declare -x VIDEO_CARDS=""
6984declare -x WANT_AUTOCONF="2.5"
6985declare -x WANT_AUTOMAKE="none"
6986declare -x WANT_JAVA_CONFIG="2"
6987declare -x _E_DOCDESTTREE_=""
6988declare -x _E_EXEDESTTREE_=""