diff --git a/eclass/toolchain.eclass b/eclass/toolchain.eclass index 1345b5e..3e422c6 100644 --- a/eclass/toolchain.eclass +++ b/eclass/toolchain.eclass @@ -49,6 +49,11 @@ is_crosscompile() { [[ ${CHOST} != ${CTARGET} ]] } +if [[ ${EAPI:-0} == [012] ]] ; then + : ${ED:=${D}} + : ${EROOT:=${ROOT}} +fi + # General purpose version check. Without a second arg matches up to minor version (x.x.x) tc_version_is_at_least() { version_is_at_least "$1" "${2:-${GCC_RELEASE_VER}}" @@ -93,7 +98,7 @@ fi export GCC_FILESDIR=${GCC_FILESDIR:-${FILESDIR}} -PREFIX=${TOOLCHAIN_PREFIX:-/usr} +PREFIX=${TOOLCHAIN_PREFIX:-${EPREFIX}/usr} if tc_version_is_at_least 3.4.0 ; then LIBPATH=${TOOLCHAIN_LIBPATH:-${PREFIX}/lib/gcc/${CTARGET}/${GCC_CONFIG_VER}} @@ -970,10 +975,10 @@ toolchain_src_configure() { elif built_with_use --hidden --missing false ${CATEGORY}/${needed_libc} crosscompile_opts_headers-only ; then confgcc+=( "${confgcc_no_libc[@]}" - --with-sysroot=${PREFIX}/${CTARGET} + --with-sysroot="${PREFIX}"/${CTARGET} ) else - confgcc+=( --with-sysroot=${PREFIX}/${CTARGET} ) + confgcc+=( --with-sysroot="${PREFIX}"/${CTARGET} ) fi fi @@ -1633,7 +1648,7 @@ toolchain_src_install() { if ! is_crosscompile ; then local EXEEXT eval $(grep ^EXEEXT= "${WORKDIR}"/build/gcc/config.log) - [[ -r ${D}${BINPATH}/gcc${EXEEXT} ]] || die "gcc not found in ${D}" + [[ -r "${D}${BINPATH}"/gcc${EXEEXT} ]] || die "gcc not found in ${D}" fi dodir /etc/env.d/gcc @@ -1647,7 +1662,7 @@ toolchain_src_install() { gcc_slot_java dodir /usr/bin - cd "${D}"${BINPATH} + cd "${D}${BINPATH}" # Ugh: we really need to auto-detect this list. # It's constantly out of date. for x in cpp gcc g++ c++ gcov g77 gcj gcjh gfortran gccgo ; do @@ -1658,11 +1673,11 @@ toolchain_src_install() { if [[ -f ${CTARGET}-${x} ]] ; then if ! is_crosscompile ; then ln -sf ${CTARGET}-${x} ${x} - dosym ${BINPATH}/${CTARGET}-${x} \ + dosym ${BINPATH#${EPREFIX}}/${CTARGET}-${x} \ /usr/bin/${x}-${GCC_CONFIG_VER} fi # Create versioned symlinks - dosym ${BINPATH}/${CTARGET}-${x} \ + dosym ${BINPATH#${EPREFIX}}/${CTARGET}-${x} \ /usr/bin/${CTARGET}-${x}-${GCC_CONFIG_VER} fi @@ -1682,7 +1697,7 @@ toolchain_src_install() { cd "${S}" if is_crosscompile; then rm -rf "${D}"/usr/share/{man,info} - rm -rf "${D}"${DATAPATH}/{man,info} + rm -rf "${D}${DATAPATH}"/{man,info} else if tc_version_is_at_least 3.0 ; then local cxx_mandir=$(find "${WORKDIR}/build/${CTARGET}/libstdc++-v3" -name man) @@ -1694,10 +1709,10 @@ toolchain_src_install() { fi has noinfo ${FEATURES} \ && rm -r "${D}/${DATAPATH}"/info \ - || prepinfo "${DATAPATH}" + || prepinfo "${DATAPATH#${EPREFIX}}" has noman ${FEATURES} \ && rm -r "${D}/${DATAPATH}"/man \ - || prepman "${DATAPATH}" + || prepman "${DATAPATH#${EPREFIX}}" fi # prune empty dirs left behind find "${D}" -depth -type d -delete 2>/dev/null @@ -1713,7 +1728,7 @@ toolchain_src_install() { # Rather install the script, else portage with changing $FILESDIR # between binary and source package borks things .... if ! is_crosscompile ; then - insinto "${DATAPATH}" + insinto "${DATAPATH#${EPREFIX}}" if tc_version_is_at_least 4.0 ; then newins "${GCC_FILESDIR}"/awk/fixlafiles.awk-no_gcc_la fixlafiles.awk || die find "${D}/${LIBPATH}" -name libstdc++.la -type f -exec rm "{}" \; @@ -1721,7 +1736,7 @@ toolchain_src_install() { else doins "${GCC_FILESDIR}"/awk/fixlafiles.awk || die fi - exeinto "${DATAPATH}" + exeinto "${DATAPATH#${EPREFIX}}" doexe "${GCC_FILESDIR}"/fix_libtool_files.sh || die doexe "${GCC_FILESDIR}"/c{89,99} || die fi @@ -1729,11 +1744,11 @@ toolchain_src_install() { # Use gid of 0 because some stupid ports don't have # the group 'root' set to gid 0. Send to /dev/null # for people who are testing as non-root. - chown -R root:0 "${D}"${LIBPATH} 2>/dev/null + chown -R root:0 "${D}${LIBPATH}" 2>/dev/null # Move pretty-printers to gdb datadir to shut ldconfig up local py gdbdir=/usr/share/gdb/auto-load${LIBPATH/\/lib\//\/$(get_libdir)\/} - pushd "${D}"${LIBPATH} >/dev/null + pushd "${D}${LIBPATH}" >/dev/null for py in $(find . -name '*-gdb.py') ; do local multidir=${py%/*} insinto "${gdbdir}/${multidir}" @@ -1768,16 +1783,16 @@ gcc_movelibs() { local OS_MULTIDIR=$($(XGCC) ${multiarg} --print-multi-os-directory) local MULTIDIR=$($(XGCC) ${multiarg} --print-multi-directory) - local TODIR=${D}${LIBPATH}/${MULTIDIR} + local TODIR="${D}${LIBPATH}"/${MULTIDIR} local FROMDIR= [[ -d ${TODIR} ]] || mkdir -p ${TODIR} for FROMDIR in \ - ${LIBPATH}/${OS_MULTIDIR} \ - ${LIBPATH}/../${MULTIDIR} \ - ${PREFIX}/lib/${OS_MULTIDIR} \ - ${PREFIX}/${CTARGET}/lib/${OS_MULTIDIR} + "${LIBPATH}"/${OS_MULTIDIR} \ + "${LIBPATH}"/../${MULTIDIR} \ + "${PREFIX}"/lib/${OS_MULTIDIR} \ + "${PREFIX}"/${CTARGET}/lib/${OS_MULTIDIR} do removedirs="${removedirs} ${FROMDIR}" FROMDIR=${D}${FROMDIR} @@ -1826,18 +1841,18 @@ fix_libtool_libdir_paths() { ./${dir}/*.la sed -i \ -e "/^dependency_libs=/s:/[^ ]*/${allarchives}:${LIBPATH}/\1:g" \ - $(find ./${PREFIX}/lib* -maxdepth 3 -name '*.la') \ + $(find ./"${PREFIX}"/lib* -maxdepth 3 -name '*.la') \ ./${dir}/*.la popd >/dev/null } create_gcc_env_entry() { dodir /etc/env.d/gcc local gcc_envd_base="/etc/env.d/gcc/${CTARGET}-${GCC_CONFIG_VER}" local gcc_specs_file - local gcc_envd_file="${D}${gcc_envd_base}" + local gcc_envd_file="${ED}${gcc_envd_base}" if [[ -z $1 ]] ; then # I'm leaving the following commented out to remind me that it # was an insanely -bad- idea. Stuff broke. GCC_SPECS isnt unset @@ -1858,7 +1885,7 @@ create_gcc_env_entry() { local mdir mosdir abi ldpath for abi in $(get_all_abis TARGET) ; do mdir=$($(XGCC) $(get_abi_CFLAGS ${abi}) --print-multi-directory) - ldpath=${LIBPATH} + ldpath="${LIBPATH}" [[ ${mdir} != "." ]] && ldpath+="/${mdir}" ldpaths="${ldpath}${ldpaths:+:${ldpaths}}" @@ -1867,7 +1894,7 @@ create_gcc_env_entry() { done else # Older gcc's didn't do multilib, so logic is simple. - ldpaths=${LIBPATH} + ldpaths="${LIBPATH}" fi cat <<-EOF > ${gcc_envd_file} @@ -1896,7 +1923,7 @@ copy_minispecs_gcc_specs() { create_gcc_env_entry hardenednossp fi create_gcc_env_entry vanilla - insinto ${LIBPATH} + insinto ${LIBPATH#${EPREFIX}} doins "${WORKDIR}"/specs/*.specs || die "failed to install specs" # Build system specs file which, if it exists, must be a complete set of # specs as it completely and unconditionally overrides the builtin specs. @@ -1911,32 +1938,32 @@ gcc_slot_java() { local x # Move Java headers to compiler-specific dir - for x in "${D}"${PREFIX}/include/gc*.h "${D}"${PREFIX}/include/j*.h ; do - [[ -f ${x} ]] && mv -f "${x}" "${D}"${LIBPATH}/include/ + for x in "${D}${PREFIX}"/include/gc*.h "${D}${PREFIX}"/include/j*.h ; do + [[ -f ${x} ]] && mv -f "${x}" "${D}${LIBPATH}"/include/ done for x in gcj gnu java javax org ; do if [[ -d ${D}${PREFIX}/include/${x} ]] ; then - dodir /${LIBPATH}/include/${x} - mv -f "${D}"${PREFIX}/include/${x}/* "${D}"${LIBPATH}/include/${x}/ - rm -rf "${D}"${PREFIX}/include/${x} + dodir /${LIBPATH#${EPREFIX}}/include/${x} + mv -f "${D}${PREFIX}"/include/${x}/* "${D}${LIBPATH}"/include/${x}/ + rm -rf "${D}${PREFIX}"/include/${x} fi done if [[ -d ${D}${PREFIX}/lib/security ]] || [[ -d ${D}${PREFIX}/$(get_libdir)/security ]] ; then - dodir /${LIBPATH}/security - mv -f "${D}"${PREFIX}/lib*/security/* "${D}"${LIBPATH}/security - rm -rf "${D}"${PREFIX}/lib*/security + dodir /${LIBPATH#${EPREFIX}}/security + mv -f "${D}${PREFIX}"/lib*/security/* "${D}${LIBPATH}"/security + rm -rf "${D}${PREFIX}"/lib*/security fi # Move random gcj files to compiler-specific directories for x in libgcj.spec logging.properties ; do x="${D}${PREFIX}/lib/${x}" - [[ -f ${x} ]] && mv -f "${x}" "${D}"${LIBPATH}/ + [[ -f ${x} ]] && mv -f "${x}" "${D}${LIBPATH}"/ done # Rename jar because it could clash with Kaffe's jar if this gcc is # primary compiler (aka don't have the - extension) - cd "${D}"${BINPATH} + cd "${D}${BINPATH}" [[ -f jar ]] && mv -f jar gcj-jar } @@ -1956,16 +1983,17 @@ toolchain_pkg_postinst() { echo # Clean up old paths - rm -f "${ROOT}"/*/rcscripts/awk/fixlafiles.awk "${ROOT}"/sbin/fix_libtool_files.sh - rmdir "${ROOT}"/*/rcscripts{/awk,} 2>/dev/null + rm -f "${EROOT}"/*/rcscripts/awk/fixlafiles.awk "${EROOT}"/sbin/fix_libtool_files.sh + rmdir "${EROOT}"/*/rcscripts{/awk,} 2>/dev/null - mkdir -p "${ROOT}"/usr/{share/gcc-data,sbin,bin} - cp "${ROOT}/${DATAPATH}"/fixlafiles.awk "${ROOT}"/usr/share/gcc-data/ || die - cp "${ROOT}/${DATAPATH}"/fix_libtool_files.sh "${ROOT}"/usr/sbin/ || die + mkdir -p "${EROOT}"/usr/{share/gcc-data,sbin,bin} + # DATAPATH has EPREFIX already, use ROOT with it + cp "${ROOT}/${DATAPATH}"/fixlafiles.awk "${EROOT}"/usr/share/gcc-data/ || die + cp "${ROOT}/${DATAPATH}"/fix_libtool_files.sh "${EROOT}"/usr/sbin/ || die # Since these aren't critical files and portage sucks with # handling of binpkgs, don't require these to be found - cp "${ROOT}/${DATAPATH}"/c{89,99} "${ROOT}"/usr/bin/ 2>/dev/null + cp "${ROOT}/${DATAPATH}"/c{89,99} "${EROOT}"/usr/bin/ 2>/dev/null fi if use regression-test ; then @@ -1988,10 +2016,10 @@ toolchain_pkg_postrm() { # clean up the cruft left behind by cross-compilers if is_crosscompile ; then - if [[ -z $(ls "${ROOT}"/etc/env.d/gcc/${CTARGET}* 2>/dev/null) ]] ; then - rm -f "${ROOT}"/etc/env.d/gcc/config-${CTARGET} - rm -f "${ROOT}"/etc/env.d/??gcc-${CTARGET} - rm -f "${ROOT}"/usr/bin/${CTARGET}-{gcc,{g,c}++}{,32,64} + if [[ -z $(ls "${EROOT}"/etc/env.d/gcc/${CTARGET}* 2>/dev/null) ]] ; then + rm -f "${EROOT}"/etc/env.d/gcc/config-${CTARGET} + rm -f "${EROOT}"/etc/env.d/??gcc-${CTARGET} + rm -f "${EROOT}"/usr/bin/${CTARGET}-{gcc,{g,c}++}{,32,64} fi return 0 fi @@ -2004,10 +2032,10 @@ toolchain_pkg_postrm() { do_gcc_config einfo "Running 'fix_libtool_files.sh ${GCC_RELEASE_VER}'" - /usr/sbin/fix_libtool_files.sh ${GCC_RELEASE_VER} + fix_libtool_files.sh ${GCC_RELEASE_VER} if [[ -n ${BRANCH_UPDATE} ]] ; then einfo "Running 'fix_libtool_files.sh ${GCC_RELEASE_VER}-${BRANCH_UPDATE}'" - /usr/sbin/fix_libtool_files.sh ${GCC_RELEASE_VER}-${BRANCH_UPDATE} + fix_libtool_files.sh ${GCC_RELEASE_VER}-${BRANCH_UPDATE} fi fi