commit: 704dc2e195792c0b08f65575b2899ceab4c154d2 Author: Mike Frysinger <vapier <AT> gentoo <DOT> org> AuthorDate: Tue May 19 04:42:37 2015 +0000 Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org> CommitDate: Thu May 21 04:35:50 2015 +0000 URL: https://gitweb.gentoo.org/proj/crossdev.git/commit/?id=704dc2e1
crossdev: add support for linking & building extra packages Add a set of extra package flags so people can throw in arbitrary sets of packages after the toolchain is complete. This requires the package to be aware of the CTARGET usage, so it can be dangerous when combined with any package in the tree. URL: http://crbug.com/372937 Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org> crossdev | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/crossdev b/crossdev index 0691641..677b5ae 100755 --- a/crossdev +++ b/crossdev @@ -71,6 +71,7 @@ Overlay Options: ${GOOD}-og, --ov-gcc${NORMAL} path Overlay for gcc ebuilds [default: search] ${GOOD}-ok, --ov-kernel${NORMAL} path Overlay for kernel ebuilds [default: search] ${GOOD}-ol, --ov-libc${NORMAL} path Overlay for C library ebuilds [default: search] + ${GOOD}-ox, --ov-extra${NORMAL} path Overlay for extra packages [default: search] Stage Options: ${GOOD}-s0, --stage0${NORMAL} Build just binutils @@ -89,6 +90,7 @@ Extra Fun (must be run after above stages): ${GOOD}--ex-only${NORMAL} Skip the stage steps above ${GOOD}--ex-gcc${NORMAL} Build extra gcc targets (gcj/ada/etc...) ${GOOD}--ex-gdb${NORMAL} Build a cross gdb + ${GOOD}--ex-pkg${NORMAL} pkg Build extra packages (may be used multiple times) ${BRACKET}Target (-t)${NORMAL} takes a tuple ${BRACKET}ARCH-VENDOR-OS-LIBC${NORMAL}; see 'crossdev -t help' EOF @@ -505,6 +507,28 @@ with_headers() { [[ ${WITH_HEADERS} == "yes" ]] ; } ex_fast() { [[ ${EX_FAST} == "yes" ]] ; } ex_gcc() { [[ ${EX_GCC} == "yes" ]] ; } ex_gdb() { [[ ${EX_GDB} == "yes" ]] ; } +ex_pkgs() { [[ ${#XPKGS[@]} -gt 0 ]] ; } + +# For each extra package, call $@ with the X* vars set up properly. +for_each_extra_pkg() { + local pkg i + + for (( i = 0; i < ${#XPKGS[@]}; ++i )) ; do + # Since the user gave us full atoms, pull them apart here. + pkg=${XPKGS[i]} + if [[ ${pkg} != */* ]]; then + usage 1 "arguments to --ex-pkg must be CATEGORY/PN" + fi + + XCAT=${pkg%/*} \ + XPKG=${pkg#*/} \ + XVER=${XVERS[i]} \ + XUSE=${XUSES[i]} \ + XENV=${XENVS[i]} \ + XOVL=${XOVLS[i]} \ + "$@" + done +} hr() { local c=${COLUMNS:-0} @@ -554,6 +578,7 @@ GCAT="sys-devel" ; GPKG="gcc" ; GVER="" GUSE="" GENV="" GOVL="" KCAT="sys-kernel" ; KPKG="linux-headers" ; KVER="" KUSE="" KENV="" KOVL="" LCAT="sys-libs" ; LPKG="[none]" ; LVER="" LUSE="" LENV="" LOVL="" DCAT="sys-devel" ; DPKG="gdb" ; DVER="" DUSE="" DENV="" DOVL="" +XPKGS=() XVERS=() XUSES=() XENVS=() XOVLS=() DEFAULT_VER="[latest]" SEARCH_OVERLAYS="" CROSSDEV_OVERLAY="" @@ -593,6 +618,7 @@ while [[ $# -gt 0 ]] ; do --l|--libc) shift; LVER=$1;; --lenv) shift; LENV=$1;; -ol|--ov-libc) shift; LOVL=$1;; + -ox|--ov-extra) shift; XOVLS+=( "$1" );; --env) shift; AENV=$1;; -A|--abis) shift; MULTILIB_ABIS=$1;; --host-abi) shift; HOST_ABI=$1;; @@ -604,6 +630,7 @@ while [[ $# -gt 0 ]] ; do --ex-only) EX_FAST="yes";; --ex-gcc) EX_GCC="yes";; --ex-gdb) EX_GDB="yes";; + --ex-pkg) shift; XPKGS+=( "$1" );; --with-*) eval $(set_withval $1);; --without-*) eval $(set_withval $1);; -f|--force) FORCE="yes";; @@ -648,6 +675,16 @@ show_target_cfg() { ) ex_gdb && pkgs+=( gdb D ) + if ex_pkgs ; then + show_extra_pkg() { + echo "ex_${XPKG}_category=${XCAT}" + echo "ex_${XPKG}_pn=${XPKG}" + crosspkgs+=( "ex_${XPKG}" ) + } + for_each_extra_pkg show_extra_pkg + echo "extrapkgs='${crosspkgs[*]}'" + fi + echo "arch=${TARCH}" echo "target=${CTARGET}" echo "category=cross-${CTARGET}" @@ -802,6 +839,9 @@ einfo "Extra: gcc pass: DO IT" ex_gdb && { einfo "Extra: gdb: DO IT" } +ex_pkgs && { +einfo "Extra: ${XPKGS[*]}" +} echo einfo "CROSSDEV_OVERLAY: ${CROSSDEV_OVERLAY}" einfo "PORT_LOGDIR: ${PORT_LOGDIR}" @@ -1073,6 +1113,7 @@ done for v in B G K L D ; do set_portage ${v} done +for_each_extra_pkg set_portage X set_metadata # filter out revdep rebuild stuff #182601 @@ -1230,5 +1271,10 @@ fi EOPTS="${EOPTS_UP} --newuse" ex_gcc && USE="${GUSE} ${USE}" doemerge ${GPKG} ${GPKG}-extra ex_gdb && USE="${DUSE} ${USE}" doemerge ${DPKG} +if ex_pkgs ; then + for pkg in "${XPKGS[@]}" ; do + doemerge "${pkg#*/}" + done +fi exit 0
