Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 390896 Details for
Bug 531610
toolchain.eclass: Prefix support
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
toolchain.patch
toolchain.patch (text/plain), 10.36 KB, created by
Benda Xu
on 2014-12-04 02:21:43 UTC
(
hide
)
Description:
toolchain.patch
Filename:
MIME Type:
Creator:
Benda Xu
Created:
2014-12-04 02:21:43 UTC
Size:
10.36 KB
patch
obsolete
>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 -<version> 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 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 531610
:
390896
|
459056