From 16cda392e1ae1fc899194ea5b066e22e4d7c0088 Mon Sep 17 00:00:00 2001 From: Michael Weiser Date: Fri, 24 Jun 2016 16:18:10 +0200 Subject: [PATCH] Add Prefix support to crossdev Introduce EPREFIX in the way suggested by vapier in bugs 473484 and 384167 (i.e. initialise from @GENTOO_PORTAGE_EPREFIX@ placeholder once and then use as normal). Default PORTAGE_CONFIGROOT to EPREFIX. --- Makefile | 2 ++ crossdev | 53 +++++++++++++++++++++++------------------- wrappers/Makefile | 3 +++ wrappers/cross-emerge | 6 ++++- wrappers/cross-fix-root | 8 +++++-- wrappers/cross-pkg-config | 6 ++++- wrappers/emerge-wrapper | 6 ++++- wrappers/etc/portage/make.conf | 2 +- 8 files changed, 56 insertions(+), 30 deletions(-) diff --git a/Makefile b/Makefile index a36fa1f..26c5b37 100644 --- a/Makefile +++ b/Makefile @@ -4,6 +4,8 @@ include settings.mk all: + sed -i -e "s,@GENTOO_PORTAGE_EPREFIX@,$(EPREFIX),g" crossdev + $(MAKE) -C wrappers install: $(INSTALL_DIR) $(DESTDIR)/$(PREFIX)/bin/ diff --git a/crossdev b/crossdev index 877c68f..74e9e72 100755 --- a/crossdev +++ b/crossdev @@ -7,15 +7,20 @@ CROSSDEV_VER="@CDEVPV@" cd / umask 0022 #159111 -: ${ROOT:=/} -if [[ ${ROOT} != "/" ]] ; then +EPREFIX="@GENTOO_PORTAGE_EPREFIX@" +[[ "${EPREFIX}" != "@"GENTOO_PORTAGE_EPREFIX"@" ]] || \ + EPREFIX="" + +: ${ROOT:=${EPREFIX}} +if [[ ${ROOT} != "${EPREFIX}" ]] ; then echo "Sorry, but crossdev does not support ROOT." 1>&2 exit 2 fi +: ${PORTAGE_CONFIGROOT:="${EPREFIX}"} CONFIGROOT="${PORTAGE_CONFIGROOT}/etc/portage" -source /etc/init.d/functions.sh || exit 1 +source "${EPREFIX}"/etc/init.d/functions.sh || exit 1 esyslog() { :; } die_logs() { echo @@ -400,7 +405,7 @@ setup_portage_vars() { fi # make sure we have a valid logdir - : ${PORT_LOGDIR:=/var/log/portage} + : ${PORT_LOGDIR:="${EPREFIX}"/var/log/portage} xmkdir -p "${PORT_LOGDIR}" } @@ -421,8 +426,8 @@ uninstall() { done rm -rf "${CONFIGROOT}"/env/cross-${CTARGET} rmdir "${CONFIGROOT}"/env 2>/dev/null - rm -f /etc/revdep-rebuild/05cross-${CTARGET} - rmdir /etc/revdep-rebuild 2>/dev/null + rm -f "${EPREFIX}"/etc/revdep-rebuild/05cross-${CTARGET} + rmdir "${EPREFIX}"/etc/revdep-rebuild 2>/dev/null # Unmerge all toolchain packages for this target. qmerge -Uqy $(qlist -IC "cross-${CTARGET}/") @@ -433,29 +438,29 @@ uninstall() { gcc-{ar,nm,ranlib} gccbug gprof ld nm objcopy objdump \ ranlib readelf size strings strip windmc windres do - rm -f /usr/bin/${CTARGET}-${f} /usr/${CTARGET}/bin/${f} + rm -f "${EPREFIX}"/usr/bin/${CTARGET}-${f} "${EPREFIX}"/usr/${CTARGET}/bin/${f} done - rm -f /usr/${CTARGET}/{sys-include,usr} - rmdir /usr/${CTARGET}/{include/asm,include} 2>/dev/null - rm -f /usr/bin/${CTARGET}-{gcc,{c,g}++,cpp,gfortran,gcov} - rm -f /etc/env.d/{binutils,gcc}/config-${CTARGET} + rm -f "${EPREFIX}"/usr/${CTARGET}/{sys-include,usr} + rmdir "${EPREFIX}"/usr/${CTARGET}/{include/asm,include} 2>/dev/null + rm -f "${EPREFIX}"/usr/bin/${CTARGET}-{gcc,{c,g}++,cpp,gfortran,gcov} + rm -f "${EPREFIX}"/etc/env.d/{binutils,gcc}/config-${CTARGET} # clean out files from crossdev itself - [[ -e /var/db/pkg/cross-${CTARGET} ]] && rmdir /var/db/pkg/cross-${CTARGET} - rm -f /usr/bin/${CTARGET}-{emerge,fix-root,pkg-config} /usr/bin/emerge-${CTARGET} + [[ -e ${EPREFIX}/var/db/pkg/cross-${CTARGET} ]] && rmdir "${EPREFIX}"/var/db/pkg/cross-${CTARGET} + rm -f "${EPREFIX}"/usr/bin/${CTARGET}-{emerge,fix-root,pkg-config} "${EPREFIX}"/usr/bin/emerge-${CTARGET} for f in make.{conf,globals,profile} ; do - f="/usr/${CTARGET}/etc/${f}" + f="${EPREFIX}/usr/${CTARGET}/etc/${f}" [[ -L ${f} ]] && rm -f ${f} - f="/usr/${CTARGET}/etc/portage/${f##*/}" + f="${EPREFIX}/usr/${CTARGET}/etc/portage/${f##*/}" [[ -L ${f} ]] && rm -f ${f} done - find /usr/share/crossdev/etc/ -type f | \ + find "${EPREFIX}"/usr/share/crossdev/etc/ -type f | \ while read f ; do f1=${f} [[ ! -e ${f1} ]] && continue m1=$(set -- `md5sum ${f1}`; echo $1) - f2=/usr/${CTARGET}${f#/usr/share/crossdev} + f2=${EPREFIX}/usr/${CTARGET}${f#/usr/share/crossdev} [[ ! -e ${f2} ]] && continue m2=$(set -- `md5sum ${f2}`; echo $1) if [[ ${m1} == ${m2} ]] ; then @@ -464,7 +469,7 @@ uninstall() { done # clean out the sysroot, prompting the user if need be - for d in /usr/lib/gcc{,-lib}/${CTARGET} /usr/${CTARGET} ; do + for d in "${EPREFIX}"/usr/lib/gcc{,-lib}/${CTARGET} "${EPREFIX}"/usr/${CTARGET} ; do if [[ ! -d ${d} ]] ; then rm -f "${d}" else @@ -540,9 +545,9 @@ hr() { || c=${c##* } fi local ext=${1:- _ - ~ -} - local sext=${ext//?/ } + local sext=${ext/?/ } local br=$(printf "%$((c + ${#ext}))s") - local banner=${br//${sext}/${ext}} + local banner=${br/${sext}/${ext}} echo "${banner:0:${c}}" } ver_get_op() { @@ -970,7 +975,7 @@ set_env() { output="env/cross-${CTARGET}/${pkg}.conf" cat <<-EOF > "${output}" SYMLINK_LIB=no - COLLISION_IGNORE="\${COLLISION_IGNORE} /usr/lib/debug/.build-id" + COLLISION_IGNORE="\${COLLISION_IGNORE} ${EPREFIX}/usr/lib/debug/.build-id" $(printf '%b' "${env}") $(printf '%b' "${AENV}") EOF @@ -1124,15 +1129,15 @@ for_each_extra_pkg set_portage X set_metadata # filter out revdep rebuild stuff #182601 -xmkdir -p /etc/revdep-rebuild -echo "SEARCH_DIRS_MASK=/usr/${CTARGET}" > /etc/revdep-rebuild/05cross-${CTARGET} +xmkdir -p "${EPREFIX}"/etc/revdep-rebuild +echo "SEARCH_DIRS_MASK=${EPREFIX}/usr/${CTARGET}" > "${EPREFIX}"/etc/revdep-rebuild/05cross-${CTARGET} hr ####################################### ### Create links for helper scripts ### -xmkdir -p /usr/${CTARGET} +xmkdir -p "${EPREFIX}"/usr/${CTARGET} emerge-wrapper --target ${CTARGET} --init || exit 1 ################# diff --git a/wrappers/Makefile b/wrappers/Makefile index 144ecc1..3ace66b 100644 --- a/wrappers/Makefile +++ b/wrappers/Makefile @@ -9,6 +9,9 @@ SITE = $(PREFIX)/share/crossdev/include/site TOPDIR = all: + sed -i -e "s,@GENTOO_PORTAGE_EPREFIX@,$(EPREFIX),g" cross-emerge \ + emerge-wrapper cross-pkg-config etc/portage/make.conf \ + cross-fix-root install: $(INSTALL_DIR) $(DESTDIR)/$(PREFIX)/bin/ $(DESTDIR)/$(SITE) diff --git a/wrappers/cross-emerge b/wrappers/cross-emerge index fc6117e..eaea140 100755 --- a/wrappers/cross-emerge +++ b/wrappers/cross-emerge @@ -9,7 +9,11 @@ if [ -z "${CHOST}" ] ; then fi export CHOST -: ${SYSROOT=/usr/${CHOST}} +EPREFIX="@GENTOO_PORTAGE_EPREFIX@" +[[ "${EPREFIX}" != "@"GENTOO_PORTAGE_EPREFIX"@" ]] || \ + EPREFIX="" + +: ${SYSROOT="${EPREFIX}"/usr/${CHOST}} : ${PORTAGE_CONFIGROOT=${SYSROOT}} export SYSROOT PORTAGE_CONFIGROOT diff --git a/wrappers/cross-fix-root b/wrappers/cross-fix-root index c74f9a0..7e11f87 100755 --- a/wrappers/cross-fix-root +++ b/wrappers/cross-fix-root @@ -37,8 +37,12 @@ case $# in ;; 1) if [ -e "/usr/${1:-..........}" ] ; then - SYSROOT="/usr/$1" - CROSS_BINDIR="/usr/bin" + EPREFIX="@GENTOO_PORTAGE_EPREFIX@" + [[ "${EPREFIX}" != "@"GENTOO_PORTAGE_EPREFIX"@" ]] || \ + EPREFIX="" + + SYSROOT="${EPREFIX}/usr/$1" + CROSS_BINDIR="${EPREFIX}/usr/bin" CROSS_PREFIX="$1-" else usage diff --git a/wrappers/cross-pkg-config b/wrappers/cross-pkg-config index e7a234c..c19198b 100755 --- a/wrappers/cross-pkg-config +++ b/wrappers/cross-pkg-config @@ -58,8 +58,12 @@ if [ -z "${SYSROOT}" ] ; then SYSROOT=${STAGEDIR} EXTRA_PKG_CONFIG_LIBDIR=${UCLINUX_PKG_CONFIG_LIBDIR} else + EPREFIX="@GENTOO_PORTAGE_EPREFIX@" + [[ "${EPREFIX}" != "@"GENTOO_PORTAGE_EPREFIX"@" ]] || \ + EPREFIX="" + # /usr/ - SYSROOT="/usr/${CHOST}" + SYSROOT="${EPREFIX}"/usr/${CHOST}" if [ -z "${CHOST}" ] || [ ! -d "${SYSROOT}" ] ; then error "Need \$ROOT or \$STAGEDIR set first" fi diff --git a/wrappers/emerge-wrapper b/wrappers/emerge-wrapper index e375025..d4d8ceb 100755 --- a/wrappers/emerge-wrapper +++ b/wrappers/emerge-wrapper @@ -13,6 +13,10 @@ if [[ $1 == "--help" || $1 == "-h" ]] ; then exit 0 fi +EPREFIX="@GENTOO_PORTAGE_EPREFIX@" +[[ "${EPREFIX}" != "@"GENTOO_PORTAGE_EPREFIX"@" ]] || \ + EPREFIX="" + PREFIX="__PREFIX__" # Enable this script to be manually installed while debugging [[ ${PREFIX} == \_\_\P\R\E\F\I\X\_\_ ]] && PREFIX="/usr" @@ -91,7 +95,7 @@ cross_wrap_bin() cross_wrap() { - SYSROOT=/usr/${CHOST} + SYSROOT="${EPREFIX}"/usr/${CHOST} cross_wrap_bin "$@" || return $? if [[ -d ${SYSROOT} ]] && [[ ! -d ${SYSROOT}/etc ]] ; then cross_wrap_etc "$@" diff --git a/wrappers/etc/portage/make.conf b/wrappers/etc/portage/make.conf index 65214dc..573ead0 100644 --- a/wrappers/etc/portage/make.conf +++ b/wrappers/etc/portage/make.conf @@ -4,7 +4,7 @@ ARCH=__ARCH__ HOSTCC=__CBUILD__-gcc -ROOT=/usr/${CHOST}/ +ROOT=@GENTOO_PORTAGE_EPREFIX@/usr/${CHOST}/ ACCEPT_KEYWORDS="__ARCH__ ~__ARCH__" -- 2.7.4 (Apple Git-66)