* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2015-09-26 17:46 Mike Frysinger
0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2015-09-26 17:46 UTC (permalink / raw
To: gentoo-commits
commit: be8ff222303de294005a9f442f2fe483d58dcac0
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 26 16:49:55 2015 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Sat Sep 26 17:45:30 2015 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=be8ff222
sys-devel/binutils-config: drop old
.../binutils-config/binutils-config-1.9-r4.ebuild | 19 -
.../binutils-config/binutils-config-2-r1.ebuild | 19 -
.../binutils-config/binutils-config-3-r3.ebuild | 19 -
.../binutils-config/binutils-config-4-r1.ebuild | 24 -
.../binutils-config/files/binutils-config-1.9 | 410 -----------------
sys-devel/binutils-config/files/binutils-config-2 | 434 ------------------
sys-devel/binutils-config/files/binutils-config-3 | 509 ---------------------
7 files changed, 1434 deletions(-)
diff --git a/sys-devel/binutils-config/binutils-config-1.9-r4.ebuild b/sys-devel/binutils-config/binutils-config-1.9-r4.ebuild
deleted file mode 100644
index b3fff54..0000000
--- a/sys-devel/binutils-config/binutils-config-1.9-r4.ebuild
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 1999-2011 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
-SRC_URI=""
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-RDEPEND="userland_GNU? ( >=sys-apps/findutils-4.2 )"
-
-src_install() {
- newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die
- doman "${FILESDIR}"/${PN}.8
-}
diff --git a/sys-devel/binutils-config/binutils-config-2-r1.ebuild b/sys-devel/binutils-config/binutils-config-2-r1.ebuild
deleted file mode 100644
index b3fff54..0000000
--- a/sys-devel/binutils-config/binutils-config-2-r1.ebuild
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 1999-2011 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
-SRC_URI=""
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-RDEPEND="userland_GNU? ( >=sys-apps/findutils-4.2 )"
-
-src_install() {
- newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die
- doman "${FILESDIR}"/${PN}.8
-}
diff --git a/sys-devel/binutils-config/binutils-config-3-r3.ebuild b/sys-devel/binutils-config/binutils-config-3-r3.ebuild
deleted file mode 100644
index f5efe86..0000000
--- a/sys-devel/binutils-config/binutils-config-3-r3.ebuild
+++ /dev/null
@@ -1,19 +0,0 @@
-# Copyright 1999-2014 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
-SRC_URI=""
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-RDEPEND="userland_GNU? ( !<sys-apps/findutils-4.2 )"
-
-src_install() {
- newbin "${FILESDIR}"/${PN}-${PV} ${PN} || die
- doman "${FILESDIR}"/${PN}.8
-}
diff --git a/sys-devel/binutils-config/binutils-config-4-r1.ebuild b/sys-devel/binutils-config/binutils-config-4-r1.ebuild
deleted file mode 100644
index f123106..0000000
--- a/sys-devel/binutils-config/binutils-config-4-r1.ebuild
+++ /dev/null
@@ -1,24 +0,0 @@
-# Copyright 1999-2014 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-EAPI="4"
-
-DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
-SRC_URI=""
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-# We also RDEPEND on sys-apps/findutils which is in base @system
-RDEPEND="sys-apps/gentoo-functions"
-
-S=${WORKDIR}
-
-src_install() {
- newbin "${FILESDIR}"/${PN}-${PV} ${PN}
- doman "${FILESDIR}"/${PN}.8
-}
diff --git a/sys-devel/binutils-config/files/binutils-config-1.9 b/sys-devel/binutils-config/files/binutils-config-1.9
deleted file mode 100644
index 8a371d4..0000000
--- a/sys-devel/binutils-config/files/binutils-config-1.9
+++ /dev/null
@@ -1,410 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2007 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-# Format of /etc/env.d/binutils/:
-# config-TARGET: CURRENT=version for TARGET
-# TARGET-VER: has a TARGET and VER variable
-
-[[ -z ${ROOT} ]] && ROOT="/"
-[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
-[[ ${ROOT} != /* ]] && ROOT="${PWD}${ROOT}"
-
-cd /
-
-trap ":" INT QUIT TSTP
-
-argv0=${0##*/}
-source /etc/init.d/functions.sh || {
- echo "${argv0}: Could not source /etc/init.d/functions.sh!" 1>&2
- exit 1
-}
-esyslog() { :; }
-umask 022
-
-usage() {
-cat << USAGE_END
-
-Usage: ${HILITE}binutils-config${NORMAL} ${GOOD}[options]${NORMAL} ${BRACKET}[binutils profile]${NORMAL}
-
-${HILITE}General Options:${NORMAL}
- ${GOOD}-c, --get-current-profile${NORMAL} Print current profile
- ${GOOD}-l, --list-profiles${NORMAL} Print a list of available profiles
- ${GOOD}-u, --uninstall${NORMAL} Remove all signs of specified target
- ${GOOD}-d, --debug${NORMAL} Execute with debug output
-
-${HILITE}Arch Specific Cruft:${NORMAL}
- ${GOOD}--amd64${NORMAL} Install extra amd64 links (x86_64)
- ${GOOD}--arm${NORMAL} Install extra arm links (arm/armeb)
- ${GOOD}--mips${NORMAL} Install extra mips links (mips/mipsel)
- ${GOOD}--x86${NORMAL} Install extra x86 links (i[3-6]86)
-
-Profile names are of the form: ${BRACKET}<CTARGET>-<binutils version>${NORMAL}
-For example: ${BRACKET}i686-pc-linux-gnu-2.15.92.0.2${NORMAL}
-
-For more info, please see ${HILITE}binutils-config${NORMAL}(8).
-USAGE_END
-}
-
-switch_profile() {
- unset TARGET VER LIBPATH FAKE_TARGETS
- source "${ENV_D}/${PROFILE}"
- if [[ -z ${TARGET} ]] ; then
- eerror "${PROFILE} is invalid (no \$TARGET defined) :("
- return 1
- fi
- if [[ -z ${VER} ]] ; then
- eerror "${PROFILE} is invalid (no \$VER defined) :("
- return 1
- fi
-
- #
- # Older installs don't have 'FAKE_TARGETS' defined, so lets
- # update these env.d entries so that we don't force the poor
- # user to re-emerge their binutils just for 1 envvar :/
- #
- if [[ ${FAKE_TARGETS-poor user} == "poor user" ]] ; then
- local targ=${TARGET/-*}
- local FAKE_TARGETS=${TARGET}
- case ${targ} in
- mips|powerpc|sparc)
- FAKE_TARGETS="${FAKE_TARGETS} ${TARGET/-/64-}";;
- mips64|powerpc64|sparc64)
- FAKE_TARGETS="${FAKE_TARGETS} ${TARGET/64-/-}";;
- esac
- echo "FAKE_TARGETS=\"${FAKE_TARGETS}\"" >> "${ENV_D}/${PROFILE}"
- fi
- local fake_targ_append="${TARGET#*-}"
- FAKE_TARGETS="${FAKE_TARGETS} ${FAKE_TARGETS_USER// /-${fake_targ_append} }"
-
- ebegin "Switching to ${PROFILE}"
-
- #
- # Generate binary symlinks
- # On systems that do 32bit/64bit, we need to fake an
- # extra set of binary names (${FAKE_TARGETS})
- #
- BINPATH=""
- BINPATH_LINKS=""
- if [[ ${TARGET} != ${HOST} ]] ; then
- #
- # Newer paths: /usr/${HOST}/${TARGET}/...
- # Older paths: /usr/${TARGET}/...
- #
- if [[ -d ${ROOT}/usr/${HOST}/${TARGET}/binutils-bin/${VER} ]] ; then
- BINPATH=/usr/${HOST}/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/libexec/gcc/${TARGET}
- fi
- fi
- if [[ -z ${BINPATH} ]] ; then
- BINPATH=/usr/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/${TARGET}/bin
- fi
- cd "${ROOT}/${BINPATH}" || exit 1
- mkdir -p "${ROOT}/${BINPATH_LINKS}" "${ROOT}/usr/bin"
- for x in * ; do
- ln -sf "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}/${x}"
- ln -sf "${BINPATH_LINKS}/${x}" "${ROOT}"/usr/bin/${TARGET}-${x}
- for fake in ${FAKE_TARGETS} ; do
- [[ -f ${ENV_D}/config-${fake} ]] && continue
- ln -sf "${BINPATH_LINKS}/${x}" "${ROOT}"/usr/bin/${fake}-${x}
- done
- if [[ ${TARGET} == ${HOST} ]] ; then
- ln -sf ${TARGET}-${x} "${ROOT}"/usr/bin/${x}
- fi
- done
-
- #
- # Generate library / ldscripts symlinks
- #
- LIBPATH=${LIBPATH:-/usr/lib/binutils/${TARGET}/${VER}}
- cd "${ROOT}/${LIBPATH}" || exit 1
- if [[ ${TARGET} == ${HOST} ]] ; then
- dstlib=${ROOT}/usr/${HOST}/lib
- else
- dstlib=${ROOT}/usr/${HOST}/${TARGET}/lib
- # Clean out old path
- rm -rf "${ROOT}"/usr/${TARGET}/lib/ldscripts
- rmdir "${ROOT}"/usr/${TARGET}/lib >& /dev/null
- fi
- # When upgrading, we need to clean up ldscripts and libs
- rm -rf "${dstlib}/ldscripts" "${ROOT}/${BINPATH_LINKS}"/ldscripts
- mkdir -p "${dstlib}"
- ln -sf "${LIBPATH}/ldscripts" "${dstlib}"/ldscripts
- find -L "${dstlib}" -type l -exec rm {} \;
- for x in lib* ; do
- ln -sf "${LIBPATH}/${x}" "${dstlib}/${x}"
- done
-
- #
- # Generate include symlinks
- #
- INCPATH=${LIBPATH}/include
- if [[ -d ${ROOT}/${INCPATH} ]] ; then
- cd "${ROOT}/${INCPATH}" || exit 1
- if [[ ${HOST} == ${TARGET} ]] ; then
- mkdir -p "${ROOT}/usr/include"
- for x in * ; do
- ln -sf "${INCPATH}/${x}" "${ROOT}/usr/include/${x}"
- done
- else
- # Clean out old path
- find . -type f -exec rm -f "${ROOT}/usr/${TARGET}/usr/include/{}" \;
- rmdir "${ROOT}/usr/${TARGET}/usr/include" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}/usr" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}" >& /dev/null
- fi
- fi
-
- #
- # Make sure proper paths get updated
- #
- if [[ ${TARGET} == ${HOST} ]] ; then
- DATAPATH=/usr/share/binutils-data/${TARGET}/${VER}
- [[ -d ${DATAPATH}/man ]] && \
- echo "MANPATH=${DATAPATH}/man" > "${ROOT}"/etc/env.d/05binutils
- [[ -d ${DATAPATH}/info ]] && \
- echo "INFOPATH=${DATAPATH}/info" >> "${ROOT}"/etc/env.d/05binutils
- # hmm, `ld` has this in SEARCH_DIR(), but ld.so does not ...
- echo "LDPATH=/usr/${TARGET}/lib" >> "${ROOT}"/etc/env.d/05binutils
- fi
-
- eend 0
-
- echo "CURRENT=${VER}" > "${ENV_D}/config-${TARGET}"
-
- #
- # Regen env.d if need/can be
- #
- if [[ ${ROOT} == "/" ]] && [[ ${TARGET} == ${HOST} ]] ; then
- env-update
- echo
- ewarn "Please remember to run:"
- echo
- ewarn " # source /etc/profile"
- echo
- fi
-
- return 0
-}
-
-uninstall_target() {
- if [[ ${TARGET} == ${HOST} ]] ; then
- eerror "${argv0}: Refusing to uninstall native binutils"
- exit 1
- fi
-
- shopt -s nullglob
- PROFILE=""
-
- for PROFILE in "${ENV_D}"/${TARGET}-* ; do
- ewarn "Removing all signs of ${PROFILE##*/}"
- rm -f "${ENV_D}"/${PROFILE}
- done
- if [[ -z ${PROFILE} ]] && [[ ! -e ${ENV_D}/config-${TARGET} ]] ; then
- eerror "${argv0}: No profiles exist for '${TARGET}'"
- exit 1
- fi
-
- rm -f "${ENV_D}"/config-${TARGET}
-
- # XXX: we still leave behind FAKE_TARGETS in /usr/bin ...
- for x in addr2line ar as c++filt elf2flt flthdr gprof ld ld.real \
- nm objcopy objdump ranlib readelf size strings strip ; do
- rm -f "${ROOT}"/usr/bin/${TARGET}-${x}
- rm -f "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin/${x}
- rm -f "${ROOT}"/usr/libexec/gcc/${TARGET}/${x}
- done
- for x in ansidecl.h bfd.h bfdlink.h dis-asm.h symcat.h ; do
- rm -f "${ROOT}"/usr/{${HOST}/,}${TARGET}/{usr/,}include/${x}
- done
- for x in bfd iberty opcodes ; do
- rm -f "${ROOT}"/usr/${HOST}/${TARGET}/lib/lib${x}{{-*,}.so,.a,.la}
- done
- # Delete broken symlinks
- local destdir="${ROOT}/usr/${HOST}/${TARGET}"
- rm -f "${destdir}"/lib/ldscripts
- find -L "${destdir}"/lib -type l -exec rm {} \;
- rmdir "${destdir}"/lib "${destdir}" 2>/dev/null
- rmdir "${destdir}"/{bin,include,lib,usr} "${destdir}" 2>/dev/null
- rmdir "${ROOT}"/var/db/pkg/cross-${TARGET} 2>/dev/null
-
- rm -f "${ENV_D}"/${TARGET}-*
-}
-
-get_current_profile() {
- if [[ ! -f ${ENV_D}/config-${PROFILE} ]] ; then
- eerror "${argv0}: No binutils profile is active!"
- return 1
- fi
-
- source "${ENV_D}/config-${PROFILE}"
-
- if [[ -z ${CURRENT} ]] ; then
- eerror "${argv0}: No binutils profile is active!"
- return 1
- fi
-
- echo "${PROFILE}-${CURRENT}"
-
- return 0
-}
-
-list_profiles() {
- local i=1
-
- set_HOST
-
- if [[ ${ROOT} != / ]] ; then
- echo "Using binutils-config info in ${ROOT}"
- fi
- target=
- for x in "${ENV_D}"/* ; do
- if [[ -f ${x} ]] && [[ ${x/\/config-} == ${x} ]] ; then
- source "${x}"
- if [[ ${target} != ${TARGET} ]] ; then
- [[ -n ${target} ]] && echo
- target=${TARGET}
- fi
-
- x=${x##*/}
- if [[ -e ${ENV_D}/config-${TARGET} ]] ; then
- source "${ENV_D}/config-${TARGET}"
- if [[ ${VER} == ${CURRENT} ]] ; then
- [[ ${TARGET} == ${HOST} ]] \
- && x="${x} ${GOOD}*${NORMAL}" \
- || x="${x} ${HILITE}*${NORMAL}"
- fi
- fi
- echo " [${i}] ${x}"
- ((++i))
- fi
- done
-}
-
-set_HOST() {
- [[ -n ${HOST} ]] && return 0
-
- if [[ -z ${CHOST} ]] ; then
- HOST=$(portageq envvar CHOST)
- else
- HOST=${CHOST}
- fi
-}
-
-ENV_D="${ROOT}etc/env.d/binutils"
-
-DEBUG="no"
-NEED_ACTION="yes"
-DOIT="switch_profile"
-PROFILE=""
-FAKE_TARGETS_USER=""
-HOST=""
-
-while [[ $# -gt 0 ]] ; do
- x=$1
- shift
- case ${x} in
- -c|--get-current-profile)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- NEED_ACTION="no"
- DOIT="get_current_profile"
- fi
- ;;
- -d|--debug)
- DEBUG="yes"
- ;;
- -l|--list-profiles)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- NEED_ACTION="no"
- DOIT="list_profiles"
- fi
- ;;
- -u|--uninstall)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- NEED_ACTION="no"
- DOIT="uninstall_target"
- TARGET=$1
- shift
- fi
- ;;
- -h|--help)
- usage
- exit 0
- ;;
- -V|--version)
- cvsver="$Id$"
- cvsver=${cvsver##*binutils-config-}
- bver=${cvsver%%,v *}
- cvsver=${cvsver#* }
- echo "binutils-config-${bver} (r${cvsver%% *})"
- exit 0
- ;;
- --amd64|--arm|--mips|--x86)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- # Make sure we have a space after each target
- NEED_ACTION="no"
- [[ -z ${PROFILE} ]] && PROFILE="current"
- case ${x} in
- --amd64) FAKE_TARGETS_USER="x86_64 ";;
- --arm) FAKE_TARGETS_USER="arm armeb ";;
- --x86) FAKE_TARGETS_USER="i386 i486 i586 i686 ";;
- --mips) FAKE_TARGETS_USER="mips mips64 mipsel mipsel64 ";;
- esac
- fi
- ;;
- -*)
- eerror "${0##*/}: Invalid switch! Try '--help'."
- exit 1
- ;;
- *)
- if [[ -n ${PROFILE} ]] && [[ ${PROFILE} != "current" ]] ; then
- eerror "${argv0}: Too many arguments! Run ${argv0} without parameters for help."
- exit 1
- fi
-
- if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
- # User gave us a # representing the profile
- i=1
- for y in "${ENV_D}"/* ; do
- [[ ${y/config-} != ${y} ]] && continue
-
- if [[ -f ${y} ]] && [[ ${x} -eq ${i} ]] ; then
- PROFILE=${y##*/}
- NEED_ACTION="no"
- break
- fi
- ((++i))
- done
- fi
-
- if [[ -z ${PROFILE} ]] ; then
- # User gave us a full HOST-ver
- x=${x##*/}
- if [[ ! -f ${ENV_D}/${x} ]] && [[ ! -f ${ENV_D}/config-${x} ]] ; then
- # Maybe they just gave us a ver ...
- set_HOST
- if [[ -f ${ENV_D}/${HOST}-${x} ]] ; then
- x=${HOST}-${x}
- else
- eerror "${argv0}: Could not locate '$x' in '${ENV_D}/'!"
- exit 1
- fi
- fi
- PROFILE=${x}
- NEED_ACTION="no"
- fi
- ;;
- esac
-done
-
-[[ ${NEED_ACTION} == "yes" ]] && usage && exit 1
-[[ ${DEBUG} == "yes" ]] && set -x
-
-[[ ${DOIT} != "list_profiles" ]] && set_HOST
-[[ -z ${PROFILE} ]] && PROFILE=${HOST}
-[[ ${PROFILE} == "current" ]] && PROFILE=$(PROFILE=${HOST} get_current_profile)
-eval ${DOIT}
-
-# vim:ts=4
diff --git a/sys-devel/binutils-config/files/binutils-config-2 b/sys-devel/binutils-config/files/binutils-config-2
deleted file mode 100644
index 48b9d51..0000000
--- a/sys-devel/binutils-config/files/binutils-config-2
+++ /dev/null
@@ -1,434 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2009 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-# Format of /etc/env.d/binutils/:
-# config-TARGET: CURRENT=version for TARGET
-# TARGET-VER: has a TARGET and VER variable
-
-: ${ROOT:=/}
-[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
-[[ ${ROOT} != /* ]] && ROOT="${PWD}${ROOT}"
-
-cd /
-
-trap ":" INT QUIT TSTP
-
-argv0=${0##*/}
-source /etc/init.d/functions.sh || {
- echo "${argv0}: Could not source /etc/init.d/functions.sh!" 1>&2
- exit 1
-}
-esyslog() { :; }
-umask 022
-
-usage() {
-cat << USAGE_END
-
-Usage: ${HILITE}binutils-config${NORMAL} ${GOOD}[options]${NORMAL} ${BRACKET}[binutils profile]${NORMAL}
-
-${HILITE}General Options:${NORMAL}
- ${GOOD}-c, --get-current-profile${NORMAL} Print current profile
- ${GOOD}-l, --list-profiles${NORMAL} Print a list of available profiles
- ${GOOD}-u, --uninstall${NORMAL} Remove all signs of specified target
- ${GOOD}-d, --debug${NORMAL} Execute with debug output
-
-${HILITE}Arch Specific Cruft:${NORMAL}
- ${GOOD}--amd64${NORMAL} Install extra amd64 links (x86_64)
- ${GOOD}--arm${NORMAL} Install extra arm links (arm/armeb)
- ${GOOD}--mips${NORMAL} Install extra mips links (mips/mipsel)
- ${GOOD}--x86${NORMAL} Install extra x86 links (i[3-6]86)
-
-Profile names are of the form: ${BRACKET}<CTARGET>-<binutils version>${NORMAL}
-For example: ${BRACKET}i686-pc-linux-gnu-2.15.92.0.2${NORMAL}
-
-For more info, please see ${HILITE}binutils-config${NORMAL}(8).
-USAGE_END
-
- exit ${1:-1}
-}
-
-mv_if_diff() {
- if cmp -s "$1" "$2" ; then
- rm -f "$1"
- else
- mv -f "$1" "$2"
- fi
-}
-
-switch_profile() {
- unset TARGET VER LIBPATH FAKE_TARGETS
- source "${ENV_D}/${PROFILE}"
- if [[ -z ${TARGET} ]] ; then
- eerror "${PROFILE} is invalid (no \$TARGET defined) :("
- return 1
- fi
- if [[ -z ${VER} ]] ; then
- eerror "${PROFILE} is invalid (no \$VER defined) :("
- return 1
- fi
-
- #
- # Older installs don't have 'FAKE_TARGETS' defined, so lets
- # update these env.d entries so that we don't force the poor
- # user to re-emerge their binutils just for 1 envvar :/
- #
- if [[ ${FAKE_TARGETS-poor user} == "poor user" ]] ; then
- local targ=${TARGET/-*}
- local FAKE_TARGETS=${TARGET}
- case ${targ} in
- mips|powerpc|sparc)
- FAKE_TARGETS="${FAKE_TARGETS} ${TARGET/-/64-}";;
- mips64|powerpc64|sparc64)
- FAKE_TARGETS="${FAKE_TARGETS} ${TARGET/64-/-}";;
- esac
- echo "FAKE_TARGETS=\"${FAKE_TARGETS}\"" >> "${ENV_D}/${PROFILE}"
- fi
- local fake_targ_append="${TARGET#*-}"
- FAKE_TARGETS="${FAKE_TARGETS} ${FAKE_TARGETS_USER// /-${fake_targ_append} }"
-
- ebegin "Switching to ${PROFILE}"
-
- #
- # Generate binary symlinks
- # On systems that do 32bit/64bit, we need to fake an
- # extra set of binary names (${FAKE_TARGETS})
- #
- BINPATH=""
- BINPATH_LINKS=""
- if [[ ${TARGET} != ${HOST} ]] ; then
- #
- # Newer paths: /usr/${HOST}/${TARGET}/...
- # Older paths: /usr/${TARGET}/...
- #
- if [[ -d ${ROOT}/usr/${HOST}/${TARGET}/binutils-bin/${VER} ]] ; then
- BINPATH=/usr/${HOST}/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/libexec/gcc/${TARGET}
- fi
- fi
- if [[ -z ${BINPATH} ]] ; then
- BINPATH=/usr/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/${TARGET}/bin
- fi
- cd "${ROOT}/${BINPATH}" || exit 1
- mkdir -p "${ROOT}/${BINPATH_LINKS}" "${ROOT}/usr/bin"
- for x in * ; do
- ln -sf "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}/${x}"
- ln -sf "${BINPATH_LINKS}/${x}" "${ROOT}"/usr/bin/${TARGET}-${x}
- for fake in ${FAKE_TARGETS} ; do
- [[ -f ${ENV_D}/config-${fake} ]] && continue
- ln -sf "${BINPATH_LINKS}/${x}" "${ROOT}"/usr/bin/${fake}-${x}
- done
- if [[ ${TARGET} == ${HOST} ]] ; then
- ln -sf ${TARGET}-${x} "${ROOT}"/usr/bin/${x}
- fi
- done
-
- #
- # Generate library / ldscripts symlinks
- #
- : ${LIBPATH:=/usr/lib/binutils/${TARGET}/${VER}}
- cd "${ROOT}/${LIBPATH}" || exit 1
- if [[ ${TARGET} == ${HOST} ]] ; then
- dstlib=${ROOT}/usr/${HOST}/lib
- else
- dstlib=${ROOT}/usr/${HOST}/${TARGET}/lib
- # Clean out old path
- rm -rf "${ROOT}"/usr/${TARGET}/lib/ldscripts
- rmdir "${ROOT}"/usr/${TARGET}/lib >& /dev/null
- fi
- # When upgrading, we need to clean up ldscripts and libs
- rm -rf "${dstlib}/ldscripts" "${ROOT}/${BINPATH_LINKS}"/ldscripts
- mkdir -p "${dstlib}"
- ln -sf "${LIBPATH}/ldscripts" "${dstlib}"/ldscripts
- find -L "${dstlib}" -type l -exec rm {} +
- for x in lib* ; do
- ln -sf "${LIBPATH}/${x}" "${dstlib}/${x}"
- done
-
- #
- # Generate include symlinks
- #
- INCPATH=${LIBPATH}/include
- if [[ -d ${ROOT}/${INCPATH} ]] ; then
- cd "${ROOT}/${INCPATH}" || exit 1
- if [[ ${HOST} == ${TARGET} ]] ; then
- mkdir -p "${ROOT}/usr/include"
- for x in * ; do
- ln -sf "${INCPATH}/${x}" "${ROOT}/usr/include/${x}"
- done
- else
- # Clean out old path -- cannot use '-exec {} +' syntax here
- find . -type f -exec rm -f "${ROOT}/usr/${TARGET}/usr/include/{}" \;
- rmdir "${ROOT}/usr/${TARGET}/usr/include" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}/usr" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}" >& /dev/null
- fi
- fi
-
- #
- # Make sure proper paths get updated
- #
- if [[ ${TARGET} == ${HOST} ]] ; then
- DATAPATH=/usr/share/binutils-data/${TARGET}/${VER}
- local e="${ROOT}"/etc/env.d/05binutils
- local ee="${e}.tmp"
- rm -f "${ee}"
- [[ -d ${DATAPATH}/man ]] && echo "MANPATH=${DATAPATH}/man" >> "${ee}"
- [[ -d ${DATAPATH}/info ]] && echo "INFOPATH=${DATAPATH}/info" >> "${ee}"
- # hmm, `ld` has this in SEARCH_DIR(), but ld.so does not ...
- if [[ -d ${ROOT}/etc/ld.so.conf.d ]] ; then
- local l="${ROOT}"/etc/ld.so.conf.d/05binutils.conf
- local ll="${l}.tmp"
- echo "/usr/${TARGET}/lib" > "${ll}"
- mv_if_diff "${ll}" "${l}"
- else
- echo "LDPATH=/usr/${TARGET}/lib" >> "${ee}"
- fi
- mv_if_diff "${ee}" "${e}"
- fi
-
- local c="${ENV_D}/config-${TARGET}"
- local cc="${c}.tmp"
- echo "CURRENT=${VER}" > "${cc}"
- mv_if_diff "${cc}" "${c}"
-
- eend 0
-
- #
- # Regen env.d if need/can be
- #
- if [[ ${ROOT} == "/" ]] && [[ ${TARGET} == ${HOST} ]] ; then
- env-update
- echo
- ewarn "Please remember to run:"
- echo
- ewarn " # . /etc/profile"
- echo
- fi
-
- return 0
-}
-
-uninstall_target() {
- if [[ ${TARGET} == ${HOST} ]] ; then
- eerror "${argv0}: Refusing to uninstall native binutils"
- exit 1
- fi
-
- shopt -s nullglob
- PROFILE=""
-
- for PROFILE in "${ENV_D}"/${TARGET}-* ; do
- ewarn "Removing all signs of ${PROFILE##*/}"
- rm -f "${ENV_D}"/${PROFILE}
- done
- if [[ -z ${PROFILE} ]] && [[ ! -e ${ENV_D}/config-${TARGET} ]] ; then
- eerror "${argv0}: No profiles exist for '${TARGET}'"
- exit 1
- fi
-
- rm -f "${ENV_D}"/config-${TARGET} "${ROOT}"/etc/ld.so.conf.d/05binutils.conf
-
- # XXX: we still leave behind FAKE_TARGETS in /usr/bin ...
- for x in addr2line ar as c++filt elf2flt flthdr gprof ld ld.real \
- nm objcopy objdump ranlib readelf size strings strip ; do
- rm -f "${ROOT}"/usr/bin/${TARGET}-${x}
- rm -f "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin/${x}
- rm -f "${ROOT}"/usr/libexec/gcc/${TARGET}/${x}
- done
- for x in ansidecl.h bfd.h bfdlink.h dis-asm.h symcat.h ; do
- rm -f "${ROOT}"/usr/{${HOST}/,}${TARGET}/{usr/,}include/${x}
- done
- for x in bfd iberty opcodes ; do
- rm -f "${ROOT}"/usr/${HOST}/${TARGET}/lib/lib${x}{{-*,}.so,.a,.la}
- done
- # Delete broken symlinks
- local destdir="${ROOT}/usr/${HOST}/${TARGET}"
- rm -f "${destdir}"/lib/ldscripts
- find -L "${destdir}"/lib -type l -exec rm {} +
- rmdir \
- "${destdir}"/{bin,include,lib,usr} \
- "${destdir}" \
- "${ROOT}"/var/db/pkg/cross-${TARGET} \
- 2>/dev/null
-
- rm -f "${ENV_D}"/${TARGET}-*
-}
-
-get_current_profile() {
- if [[ ! -f ${ENV_D}/config-${PROFILE} ]] ; then
- eerror "${argv0}: No binutils profile is active!"
- return 1
- fi
-
- source "${ENV_D}/config-${PROFILE}"
-
- if [[ -z ${CURRENT} ]] ; then
- eerror "${argv0}: No binutils profile is active!"
- return 1
- fi
-
- echo "${PROFILE}-${CURRENT}"
-
- return 0
-}
-
-list_profiles() {
- local i=1
-
- set_HOST
-
- if [[ ${ROOT} != / ]] ; then
- echo "Using binutils-config info in ${ROOT}"
- fi
- target=
- for x in "${ENV_D}"/* ; do
- if [[ -f ${x} ]] && [[ ${x/\/config-} == ${x} ]] ; then
- source "${x}"
- if [[ ${target} != ${TARGET} ]] ; then
- [[ -n ${target} ]] && echo
- target=${TARGET}
- fi
-
- x=${x##*/}
- if [[ -e ${ENV_D}/config-${TARGET} ]] ; then
- source "${ENV_D}/config-${TARGET}"
- if [[ ${VER} == ${CURRENT} ]] ; then
- [[ ${TARGET} == ${HOST} ]] \
- && x="${x} ${GOOD}*${NORMAL}" \
- || x="${x} ${HILITE}*${NORMAL}"
- fi
- fi
- echo " [${i}] ${x}"
- ((++i))
- fi
- done
-}
-
-set_HOST() {
- [[ -n ${HOST} ]] && return 0
-
- if [[ -z ${CHOST} ]] ; then
- HOST=$(portageq envvar CHOST)
- else
- HOST=${CHOST}
- fi
-}
-
-ENV_D="${ROOT}etc/env.d/binutils"
-
-DEBUG="no"
-NEED_ACTION="yes"
-DOIT="switch_profile"
-PROFILE=""
-FAKE_TARGETS_USER=""
-HOST=""
-
-while [[ $# -gt 0 ]] ; do
- x=$1
- shift
- case ${x} in
- -c|--get-current-profile)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- NEED_ACTION="no"
- DOIT="get_current_profile"
- fi
- ;;
- -d|--debug)
- DEBUG="yes"
- ;;
- -l|--list-profiles)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- NEED_ACTION="no"
- DOIT="list_profiles"
- fi
- ;;
- -u|--uninstall)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- NEED_ACTION="no"
- DOIT="uninstall_target"
- TARGET=$1
- shift
- fi
- ;;
- -h|--help)
- usage 0
- ;;
- -V|--version)
- unset Header
- cvsver="$Id$"
- cvsver=${cvsver##*binutils-config-}
- bver=${cvsver%%,v *}
- cvsver=${cvsver#* }
- echo "binutils-config-${bver} (r${cvsver%% *})"
- exit 0
- ;;
- --amd64|--arm|--mips|--x86)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- # Make sure we have a space after each target
- NEED_ACTION="no"
- [[ -z ${PROFILE} ]] && PROFILE="current"
- case ${x} in
- --amd64) FAKE_TARGETS_USER="x86_64 ";;
- --arm) FAKE_TARGETS_USER="arm armeb ";;
- --x86) FAKE_TARGETS_USER="i386 i486 i586 i686 ";;
- --mips) FAKE_TARGETS_USER="mips mips64 mipsel mipsel64 ";;
- esac
- fi
- ;;
- -*)
- eerror "${0##*/}: Invalid switch! Try '--help'."
- exit 1
- ;;
- *)
- if [[ -n ${PROFILE} ]] && [[ ${PROFILE} != "current" ]] ; then
- eerror "${argv0}: Too many arguments! Run ${argv0} without parameters for help."
- exit 1
- fi
-
- if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
- # User gave us a # representing the profile
- i=1
- for y in "${ENV_D}"/* ; do
- [[ ${y/config-} != ${y} ]] && continue
-
- if [[ -f ${y} ]] && [[ ${x} -eq ${i} ]] ; then
- PROFILE=${y##*/}
- NEED_ACTION="no"
- break
- fi
- ((++i))
- done
- fi
-
- if [[ -z ${PROFILE} ]] ; then
- # User gave us a full HOST-ver
- x=${x##*/}
- if [[ ! -f ${ENV_D}/${x} ]] && [[ ! -f ${ENV_D}/config-${x} ]] ; then
- # Maybe they just gave us a ver ...
- set_HOST
- if [[ -f ${ENV_D}/${HOST}-${x} ]] ; then
- x=${HOST}-${x}
- else
- eerror "${argv0}: Could not locate '$x' in '${ENV_D}/'!"
- exit 1
- fi
- fi
- PROFILE=${x}
- NEED_ACTION="no"
- fi
- ;;
- esac
-done
-
-[[ ${NEED_ACTION} == "yes" ]] && usage 1
-[[ ${DEBUG} == "yes" ]] && set -x
-
-[[ ${DOIT} != "list_profiles" ]] && set_HOST
-[[ -z ${PROFILE} ]] && PROFILE=${HOST}
-[[ ${PROFILE} == "current" ]] && PROFILE=$(PROFILE=${HOST} get_current_profile)
-eval ${DOIT}
-
-# vim:ts=4
diff --git a/sys-devel/binutils-config/files/binutils-config-3 b/sys-devel/binutils-config/files/binutils-config-3
deleted file mode 100644
index a9e9412..0000000
--- a/sys-devel/binutils-config/files/binutils-config-3
+++ /dev/null
@@ -1,509 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Id$
-
-# Format of /etc/env.d/binutils/:
-# config-TARGET: CURRENT=version for TARGET
-# TARGET-VER: has a TARGET and VER variable
-
-: ${ROOT:=/}
-[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
-[[ ${ROOT} != /* ]] && ROOT="${PWD%/}/${ROOT}"
-
-cd /
-
-trap ":" INT QUIT TSTP
-
-argv0=${0##*/}
-source /etc/init.d/functions.sh || {
- echo "${argv0}: Could not source /etc/init.d/functions.sh!" 1>&2
- exit 1
-}
-esyslog() { :; }
-die() { eerror "${argv0}: $*"; exit 1; }
-umask 022
-
-usage() {
-cat << USAGE_END
-Usage: ${HILITE}binutils-config${NORMAL} ${GOOD}[options]${NORMAL} ${BRACKET}[binutils profile]${NORMAL}
-
-${HILITE}General Options:${NORMAL}
- ${GOOD}-c, --get-current-profile${NORMAL} Print current profile
- ${GOOD}-l, --list-profiles${NORMAL} Print a list of available profiles
- ${GOOD}-u, --uninstall${NORMAL} Remove all signs of specified target
- ${GOOD}-d, --debug${NORMAL} Execute with debug output
-
-${HILITE}General Cruft:${NORMAL}
- ${GOOD}--linker${NORMAL} <linker> Switch to specified linker (if supported)
-
-${HILITE}Arch Specific Cruft:${NORMAL}
- ${GOOD}--amd64${NORMAL} Install extra amd64 links (x86_64)
- ${GOOD}--arm${NORMAL} Install extra arm links (arm/armeb)
- ${GOOD}--mips${NORMAL} Install extra mips links (mips/mipsel)
- ${GOOD}--x86${NORMAL} Install extra x86 links (i[3-6]86)
-
-Profile names are of the form: ${BRACKET}<CTARGET>-<binutils version>${NORMAL}
-For example: ${BRACKET}i686-pc-linux-gnu-2.15.92.0.2${NORMAL}
-
-For more info, please see ${HILITE}binutils-config${NORMAL}(8).
-USAGE_END
-
- exit ${1:-1}
-}
-
-mv_if_diff() {
- if cmp -s "$1" "$2" ; then
- rm -f "$1"
- else
- mv -f "$1" "$2"
- fi
-}
-atomic_ln() {
- local target=$1 linkdir=$2 linkname=$3 linktmp linkfull
- linktmp="${linkdir}/.binutils-config.tmp.${linkname}"
- linkfull="${linkdir}/${linkname}"
- if [[ -d ${linkfull} ]] ; then
- # if linking to a dir, we need a little magic to
- # make it atomic since `mv -T` is not portable
- rm -rf "${linktmp}"
- mkdir -p "${linktmp}"
- ln -sf "${target}" "${linktmp}/${linkname}"
- mv "${linktmp}/${linkname}" "${linktmp}/../"
- rmdir "${linktmp}"
- else
- # `ln` will expand into unlink();symlink(); which
- # is not atomic for a small amount of time, but
- # `mv` is a single rename() call
- ln -sf "${target}" "${linktmp}"
- mv "${linktmp}" "${linkfull}"
- fi
-}
-
-setup_env() {
- unset TARGET VER LIBPATH FAKE_TARGETS
- source "${ENV_D}/${PROFILE}"
- if [[ -z ${TARGET} ]] ; then
- eerror "${PROFILE} is invalid (no \$TARGET defined) :("
- return 1
- fi
- if [[ -z ${VER} ]] ; then
- eerror "${PROFILE} is invalid (no \$VER defined) :("
- return 1
- fi
-
- #
- # Older installs don't have 'FAKE_TARGETS' defined, so lets
- # update these env.d entries so that we don't force the poor
- # user to re-emerge their binutils just for 1 envvar :/
- #
- if [[ ${FAKE_TARGETS-poor user} == "poor user" ]] ; then
- local targ=${TARGET/-*}
- local FAKE_TARGETS=${TARGET}
- case ${targ} in
- mips|powerpc|sparc)
- FAKE_TARGETS="${FAKE_TARGETS} ${TARGET/-/64-}";;
- mips64|powerpc64|sparc64)
- FAKE_TARGETS="${FAKE_TARGETS} ${TARGET/64-/-}";;
- esac
- echo "FAKE_TARGETS=\"${FAKE_TARGETS}\"" >> "${ENV_D}/${PROFILE}"
- fi
- local fake_targ_append="${TARGET#*-}"
- FAKE_TARGETS="${FAKE_TARGETS} ${FAKE_TARGETS_USER// /-${fake_targ_append} }"
-
- #
- # Generate binary symlinks
- # On systems that do 32bit/64bit, we need to fake an
- # extra set of binary names (${FAKE_TARGETS})
- #
- BINPATH=""
- BINPATH_LINKS=""
- if [[ ${TARGET} != ${HOST} ]] ; then
- #
- # Newer paths: /usr/${HOST}/${TARGET}/...
- # Older paths: /usr/${TARGET}/...
- #
- if [[ -d ${ROOT}/usr/${HOST}/${TARGET}/binutils-bin/${VER} ]] ; then
- BINPATH=/usr/${HOST}/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/libexec/gcc/${TARGET}
- fi
- fi
- if [[ -z ${BINPATH} ]] ; then
- BINPATH=/usr/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/${TARGET}/bin
- fi
-}
-
-switch_profile() {
- ebegin "Switching to ${PROFILE}"
-
- setup_env || return 1
-
- cd "${ROOT}/${BINPATH}" || exit 1
- mkdir -p "${ROOT}/${BINPATH_LINKS}" "${ROOT}/usr/bin"
- for x in * ; do
- atomic_ln "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}" "${x}"
- atomic_ln "${BINPATH_LINKS}/${x}" "${ROOT}/usr/bin/" "${TARGET}-${x}"
- for fake in ${FAKE_TARGETS} ; do
- [[ -f ${ENV_D}/config-${fake} ]] && continue
- atomic_ln "${BINPATH_LINKS}/${x}" "${ROOT}/usr/bin" "${fake}-${x}"
- done
- if [[ ${TARGET} == ${HOST} ]] ; then
- atomic_ln "${TARGET}-${x}" "${ROOT}/usr/bin" "${x}"
- fi
- done
-
- #
- # Generate library / ldscripts symlinks
- #
- : ${LIBPATH:=/usr/lib/binutils/${TARGET}/${VER}}
- cd "${ROOT}/${LIBPATH}" || exit 1
- if [[ ${TARGET} == ${HOST} ]] ; then
- dstlib=${ROOT}/usr/${HOST}/lib
- else
- dstlib=${ROOT}/usr/${HOST}/${TARGET}/lib
- fi
- # When upgrading, we need to clean up ldscripts and libs
- mkdir -p "${dstlib}"
- rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
- atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
- find -L "${dstlib}" -type l -exec rm -v {} +
- for x in lib* ; do
- atomic_ln "${LIBPATH}/${x}" "${dstlib}" "${x}"
- done
-
- #
- # Generate include symlinks
- #
- INCPATH=${LIBPATH}/include
- if [[ -d ${ROOT}/${INCPATH} ]] ; then
- cd "${ROOT}/${INCPATH}" || exit 1
- if [[ ${HOST} == ${TARGET} ]] ; then
- mkdir -p "${ROOT}/usr/include"
- for x in * ; do
- atomic_ln "${INCPATH}/${x}" "${ROOT}/usr/include" "${x}"
- done
- else
- # Clean out old path -- cannot use '-exec {} +' syntax here
- find . -type f -exec rm -f "${ROOT}/usr/${TARGET}/usr/include/{}" \;
- rmdir "${ROOT}/usr/${TARGET}/usr/include" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}/usr" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}" >& /dev/null
- fi
- fi
-
- #
- # Make sure proper paths get updated
- #
- if [[ ${TARGET} == ${HOST} ]] ; then
- DATAPATH=/usr/share/binutils-data/${TARGET}/${VER}
- local e="${ROOT}"/etc/env.d/05binutils
- local ee="${e}.tmp"
- rm -f "${ee}"
- [[ -d ${DATAPATH}/man ]] && echo "MANPATH=${DATAPATH}/man" >> "${ee}"
- [[ -d ${DATAPATH}/info ]] && echo "INFOPATH=${DATAPATH}/info" >> "${ee}"
- # hmm, `ld` has this in SEARCH_DIR(), but ld.so does not ...
- if [[ -d ${ROOT}/etc/ld.so.conf.d ]] ; then
- local l="${ROOT}"/etc/ld.so.conf.d/05binutils.conf
- local ll="${l}.tmp"
- echo "/usr/${TARGET}/lib" > "${ll}"
- mv_if_diff "${ll}" "${l}"
- else
- echo "LDPATH=/usr/${TARGET}/lib" >> "${ee}"
- fi
- mv_if_diff "${ee}" "${e}"
- fi
-
- local c="${ENV_D}/config-${TARGET}"
- local cc="${c}.tmp"
- echo "CURRENT=${VER}" > "${cc}"
- mv_if_diff "${cc}" "${c}"
-
- eend 0
-
- #
- # Regen env.d if need/can be
- #
- if [[ ${ROOT} == "/" ]] && [[ ${TARGET} == ${HOST} ]] ; then
- env-update
- echo
- ewarn "Please remember to run:"
- echo
- ewarn " # . /etc/profile"
- echo
- fi
-
- return 0
-}
-
-uninstall_target() {
- : ${TARGET:=${UARG}}
-
- if [[ ${TARGET} == ${HOST} ]] ; then
- die "refusing to uninstall native binutils"
- fi
-
- shopt -s nullglob
- PROFILE=""
-
- for PROFILE in "${ENV_D}"/${TARGET}-* ; do
- ewarn "Removing all signs of ${PROFILE##*/}"
- rm -f "${ENV_D}"/${PROFILE}
- done
- if [[ -z ${PROFILE} ]] && [[ ! -e ${ENV_D}/config-${TARGET} ]] ; then
- die "no profiles exist for '${TARGET}'"
- fi
-
- rm -f "${ENV_D}"/config-${TARGET} "${ROOT}"/etc/ld.so.conf.d/05binutils.conf
-
- # XXX: we still leave behind FAKE_TARGETS in /usr/bin ...
- local x
- for x in \
- addr2line ar as c++filt elf2flt elfedit flthdr gprof \
- ld ld.{bfd,gold,real} \
- nm objcopy objdump ranlib readelf size strings strip
- do
- x=(
- "${ROOT}"/usr/bin/${TARGET}-${x}
- "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin/${x}
- "${ROOT}"/usr/libexec/gcc/${TARGET}/${x}
- )
- rm -f "${x[@]}"
- done
- for x in ansidecl.h bfd.h bfdlink.h dis-asm.h symcat.h ; do
- rm -f "${ROOT}"/usr/{${HOST}/,}${TARGET}/{usr/,}include/${x}
- done
- for x in bfd iberty opcodes ; do
- rm -f "${ROOT}"/usr/${HOST}/${TARGET}/lib/lib${x}{{-*,}.so,.a,.la}
- done
- # Delete broken symlinks
- local destdir="${ROOT}/usr/${HOST}/${TARGET}"
- rm -f "${destdir}"/lib/ldscripts
- find -L "${destdir}"/lib -type l -exec rm {} +
- rmdir \
- "${destdir}"/{bin,include,lib,usr} \
- "${destdir}" \
- "${ROOT}"/var/db/pkg/cross-${TARGET} \
- "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin \
- "${ROOT}"/usr/libexec/gcc/${TARGET} \
- 2>/dev/null
-
- rm -f "${ENV_D}"/${TARGET}-*
-}
-
-set_current_profile() {
- if [[ ! -f ${ENV_D}/config-${TARGET} ]] ; then
- eerror "${argv0}: unable to locate a profile for target: ${TARGET}"
- return 1
- fi
-
- source "${ENV_D}/config-${TARGET}"
-
- if [[ -z ${CURRENT} ]] ; then
- eerror "${argv0}: no binutils profile is active!"
- return 1
- fi
-
- echo "${TARGET}-${CURRENT}"
-
- return 0
-}
-get_current_profile() { echo "${PROFILE}" ; }
-
-list_profiles() {
- local x i target
-
- if [[ ${ROOT} != / ]] ; then
- echo "Using binutils-config info in ${ROOT}"
- fi
-
- set -- "${ENV_D}"/*
- target=
- i=1
-
- for x ; do
- # skip broken links and config files
- [[ -f ${x} ]] || continue
- [[ ${x} == */config-* ]] && continue
-
- source "${x}"
- if [[ ${target} != ${TARGET} ]] ; then
- [[ -n ${target} ]] && echo
- target=${TARGET}
- fi
-
- x=${x##*/}
- if [[ -e ${ENV_D}/config-${TARGET} ]] ; then
- source "${ENV_D}/config-${TARGET}"
- if [[ ${VER} == ${CURRENT} ]] ; then
- [[ ${TARGET} == ${HOST} ]] \
- && x="${x} ${GOOD}*${NORMAL}" \
- || x="${x} ${HILITE}*${NORMAL}"
- fi
- fi
-
- # We would align the [...] field like so:
- #printf ' [%*ss] %s\n' ${##} "${i}" "${x}"
- # but this breaks simple scripting: `binutils -l | awk '{print $2}'`
-
- # Or we could align the target col like so:
- #printf ' [%s]%*s %s\n' "${i}" $(( ${##} - ${#i} )) "" "${x}"
- # but i'm not sold that it looks better
-
- # So keep it simple ... only makes a diff anyways for crazy people
- # like me which have 100+ binutils packages installed ...
- echo " [$i] ${x}"
- ((++i))
- done
-}
-
-switch_linker() {
- local bpath ld=$1
-
- case ${ld} in
- ld.*) ;;
- *) die "not supported: linker must start with 'ld.'" ;;
- esac
-
- setup_env || return 1
- bpath="${ROOT}/${BINPATH}"
-
- # does this binutils even support the requested linker ?
- if [[ ! -e ${bpath}/${ld} ]] ; then
- die "sorry, but ${PROFILE} doesn't support the ${ld} linker"
- fi
-
- # switch it up
- ebegin "Setting default linker to ${ld} for ${PROFILE}"
- atomic_ln ${ld} "${bpath}" ld
- eend $?
-}
-
-set_HOST() {
- # Set HOST to CHOST if it isn't already set
- : ${HOST:=${CHOST:-$(portageq envvar CHOST)}}
-}
-
-ENV_D="${ROOT}etc/env.d/binutils"
-
-DEBUG="no"
-NEED_ACTION="yes"
-DOIT="switch_profile"
-PROFILE="current"
-FAKE_TARGETS_USER=""
-HOST=""
-TARGET=""
-unset UARG
-
-select_action() {
- if [[ ${NEED_ACTION} != "no" ]] ; then
- NEED_ACTION="no"
- DOIT=$1
- else
- die "one action at a time!"
- fi
-}
-
-while [[ $# -gt 0 ]] ; do
- x=$1
- shift
- case ${x} in
- -c|--get-current-profile) select_action get_current_profile ;;
- -l|--list|--list-profiles) select_action list_profiles ;;
- -u|--uninstall) select_action uninstall_target ;;
- --linker) select_action "switch_linker $1"; shift ;;
- -d|--debug) DEBUG="yes" ;;
- -h|--help) usage 0 ;;
- -V|--version)
- unset Header
- cvsver="$Id$"
- cvsver=${cvsver##*binutils-config-}
- bver=${cvsver%%,v *}
- cvsver=${cvsver#* }
- echo "binutils-config-${bver} (r${cvsver%% *})"
- exit 0
- ;;
- --amd64|--arm|--mips|--x86)
- if [[ ${NEED_ACTION} == "yes" ]] ; then
- # Make sure we have a space after each target
- NEED_ACTION="no"
- case ${x} in
- --amd64) FAKE_TARGETS_USER="x86_64 ";;
- --arm) FAKE_TARGETS_USER="arm armeb ";;
- --x86) FAKE_TARGETS_USER="i386 i486 i586 i686 ";;
- --mips) FAKE_TARGETS_USER="mips mips64 mipsel mipsel64 ";;
- esac
- fi
- ;;
- -*)
- die "invalid switch! Try '--help'."
- ;;
- *)
- if [[ ${UARG+set} == "set" ]] ; then
- die "only one profile/target at a time please"
- fi
- NEED_ACTION="maybe"
- UARG=${x}
- ;;
- esac
-done
-
-[[ ${NEED_ACTION} == "yes" ]] && usage 1
-[[ ${DEBUG} == "yes" ]] && set -x
-
-# All operations need to know the current HOST to figure out
-# what is a native target and what is a cross target
-set_HOST
-
-# All operations need to know the profile the user wants
-case ${DOIT} in
-switch_profile|switch_linker_*)
- # decode user's profile choice
- x=${UARG:-$(TARGET=${HOST} set_current_profile)}
- PROFILE=""
- if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
- # User gave us a # representing the profile
- i=1
- for y in "${ENV_D}"/* ; do
- [[ ${y/config-} != ${y} ]] && continue
-
- if [[ -f ${y} ]] && [[ ${x} -eq ${i} ]] ; then
- PROFILE=${y##*/}
- break
- fi
- ((++i))
- done
- fi
-
- if [[ -z ${PROFILE} ]] ; then
- # User gave us a full HOST-ver
- x=${x##*/}
- if [[ -f ${ENV_D}/${x} ]] ; then
- # Valid HOST-ver yeah!
- PROFILE=${x}
- else
- # Not a valid HOST-ver ...
- if [[ ! -f ${ENV_D}/config-${x} ]] ; then
- # Maybe they just gave us a ver ...
- if [[ -f ${ENV_D}/${HOST}-${x} ]] ; then
- x=${HOST}-${x}
- else
- die "could not locate '$x' in '${ENV_D}/'!"
- fi
- PROFILE=${x}
- else
- # Maybe they just gave us a target ... pick active profile
- PROFILE=$(TARGET=${x} set_current_profile)
- fi
- fi
- fi
- ;;
-*)
- # lookup current profile as the user gave us a target
- PROFILE=$(TARGET=${UARG:-${HOST}} set_current_profile) || exit 1
- ;;
-esac
-
-eval ${DOIT}
-
-# vim:ts=4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2015-09-26 18:15 Mike Frysinger
0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2015-09-26 18:15 UTC (permalink / raw
To: gentoo-commits
commit: b851bfe6001dc7abd01ab28d6b569f51c85b3c5e
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Sat Sep 26 17:31:55 2015 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Sat Sep 26 18:15:06 2015 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b851bfe6
sys-devel/binutils-config: move libs/headers to binutils-libs #528088
The binutils-libs package will handle installing headers & libs for
the various binutils libraries. Update binutils-config to delete the
old symlinks so we don't run into collisions/inconsistent state.
sys-devel/binutils-config/binutils-config-5.ebuild | 40 ++
sys-devel/binutils-config/files/binutils-config-5 | 479 +++++++++++++++++++++
2 files changed, 519 insertions(+)
diff --git a/sys-devel/binutils-config/binutils-config-5.ebuild b/sys-devel/binutils-config/binutils-config-5.ebuild
new file mode 100644
index 0000000..f3a4c32
--- /dev/null
+++ b/sys-devel/binutils-config/binutils-config-5.ebuild
@@ -0,0 +1,40 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI="4"
+
+DESCRIPTION="Utility to change the binutils version being used"
+HOMEPAGE="https://www.gentoo.org/"
+SRC_URI=""
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
+IUSE=""
+
+# We also RDEPEND on sys-apps/findutils which is in base @system
+RDEPEND="sys-apps/gentoo-functions
+ !<app-admin/eselect-1.4.5"
+
+S=${WORKDIR}
+
+src_install() {
+ newbin "${FILESDIR}"/${PN}-${PV} ${PN}
+ doman "${FILESDIR}"/${PN}.8
+
+ insinto /usr/share/eselect/modules
+ doins "${FILESDIR}"/binutils.eselect
+}
+
+pkg_preinst() {
+ # Force a refresh when upgrading from an older version that symlinked
+ # in all the libs & includes that binutils-libs handles. #528088
+ if has_version "<${CATEGORY}/${PN}-5" ; then
+ local bc current
+ bc="${ED}/usr/bin/binutils-config"
+ if current=$("${bc}" -c) ; then
+ "${bc}" "${current}"
+ fi
+ fi
+}
diff --git a/sys-devel/binutils-config/files/binutils-config-5 b/sys-devel/binutils-config/files/binutils-config-5
new file mode 100755
index 0000000..3afc963
--- /dev/null
+++ b/sys-devel/binutils-config/files/binutils-config-5
@@ -0,0 +1,479 @@
+#!/bin/bash
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+# Format of /etc/env.d/binutils/:
+# config-TARGET: CURRENT=version for TARGET
+# TARGET-VER: has a TARGET and VER variable
+
+: ${ROOT:=/}
+[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
+[[ ${ROOT} != /* ]] && ROOT="${PWD%/}/${ROOT}"
+
+cd /
+
+trap ":" INT QUIT TSTP
+
+argv0=${0##*/}
+FUNCTIONS_SH="/lib/gentoo/functions.sh"
+source ${FUNCTIONS_SH} || {
+ echo "${argv0}: Could not source ${FUNCTIONS_SH}!" 1>&2
+ exit 1
+}
+esyslog() { :; }
+die() { eerror "${argv0}: $*"; exit 1; }
+umask 022
+
+usage() {
+cat << USAGE_END
+Usage: ${HILITE}binutils-config${NORMAL} ${GOOD}[options]${NORMAL} ${BRACKET}[binutils profile]${NORMAL}
+
+${HILITE}General Options:${NORMAL}
+ ${GOOD}-c, --get-current-profile${NORMAL} Print current profile
+ ${GOOD}-l, --list-profiles${NORMAL} Print a list of available profiles
+ ${GOOD}-u, --uninstall${NORMAL} Remove all signs of specified target
+ ${GOOD}-d, --debug${NORMAL} Execute with debug output
+
+${HILITE}General Cruft:${NORMAL}
+ ${GOOD}--linker${NORMAL} <linker> Switch to specified linker (if supported)
+
+Profile names are of the form: ${BRACKET}<CTARGET>-<binutils version>${NORMAL}
+For example: ${BRACKET}i686-pc-linux-gnu-2.15.92.0.2${NORMAL}
+
+For more info, please see ${HILITE}binutils-config${NORMAL}(8).
+USAGE_END
+
+ exit ${1:-1}
+}
+
+mv_if_diff() {
+ if cmp -s "$1" "$2" ; then
+ rm -f "$1"
+ else
+ mv -f "$1" "$2"
+ fi
+}
+atomic_ln() {
+ local target=$1 linkdir=$2 linkname=$3 linktmp linkfull
+ linktmp="${linkdir}/.binutils-config.tmp.${linkname}"
+ linkfull="${linkdir}/${linkname}"
+ if [[ -d ${linkfull} ]] ; then
+ # if linking to a dir, we need a little magic to
+ # make it atomic since `mv -T` is not portable
+ rm -rf "${linktmp}"
+ mkdir -p "${linktmp}"
+ ln -sf "${target}" "${linktmp}/${linkname}"
+ mv "${linktmp}/${linkname}" "${linktmp}/../"
+ rmdir "${linktmp}"
+ else
+ # `ln` will expand into unlink();symlink(); which
+ # is not atomic for a small amount of time, but
+ # `mv` is a single rename() call
+ ln -sf "${target}" "${linktmp}"
+ mv "${linktmp}" "${linkfull}"
+ fi
+}
+
+setup_env() {
+ unset TARGET VER LIBPATH
+ source "${ENV_D}/${PROFILE}"
+ if [[ -z ${TARGET} ]] ; then
+ eerror "${PROFILE} is invalid (no \$TARGET defined) :("
+ return 1
+ fi
+ if [[ -z ${VER} ]] ; then
+ eerror "${PROFILE} is invalid (no \$VER defined) :("
+ return 1
+ fi
+
+ #
+ # Generate binary symlinks
+ #
+ BINPATH=""
+ BINPATH_LINKS=""
+ if [[ ${TARGET} != ${HOST} ]] ; then
+ #
+ # Newer paths: /usr/${HOST}/${TARGET}/...
+ # Older paths: /usr/${TARGET}/...
+ #
+ if [[ -d ${ROOT}/usr/${HOST}/${TARGET}/binutils-bin/${VER} ]] ; then
+ BINPATH=/usr/${HOST}/${TARGET}/binutils-bin/${VER}
+ BINPATH_LINKS=/usr/libexec/gcc/${TARGET}
+ fi
+ fi
+ if [[ -z ${BINPATH} ]] ; then
+ BINPATH=/usr/${TARGET}/binutils-bin/${VER}
+ BINPATH_LINKS=/usr/${TARGET}/bin
+ fi
+}
+
+# Lists of headers that various versions have installed.
+HEADERS=(
+ ansidecl.h bfd.h bfdlink.h demangle.h dis-asm.h dyn-string.h
+ fibheap.h hashtab.h libiberty.h objalloc.h plugin-api.h
+ splay-tree.h symcat.h
+)
+
+switch_profile() {
+ local x
+
+ ebegin "Switching to ${PROFILE}"
+
+ setup_env || return 1
+
+ cd "${ROOT}/${BINPATH}" || exit 1
+ mkdir -p "${ROOT}/${BINPATH_LINKS}" "${ROOT}/usr/bin"
+ for x in * ; do
+ atomic_ln "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}" "${x}"
+ atomic_ln "${BINPATH_LINKS}/${x}" "${ROOT}/usr/bin" "${TARGET}-${x}"
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ atomic_ln "${TARGET}-${x}" "${ROOT}/usr/bin" "${x}"
+ fi
+ done
+
+ #
+ # Generate library / ldscripts symlinks
+ #
+ : ${LIBPATH:=/usr/lib/binutils/${TARGET}/${VER}}
+ cd "${ROOT}/${LIBPATH}" || exit 1
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ dstlib=${ROOT}/usr/${HOST}/lib
+ else
+ dstlib=${ROOT}/usr/${HOST}/${TARGET}/lib
+ fi
+ # When upgrading, we need to clean up ldscripts and libs.
+ # Don't symlink back in the libs -- the binutils-lib package handles
+ # these now.
+ # TODO: Stop requiring even the ldscripts symlink.
+ mkdir -p "${dstlib}"
+ rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
+ atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
+ find -L "${dstlib}" -xtype l -name 'lib*' -exec rm -f {} +
+
+ #
+ # Clean out old generated include symlinks
+ #
+ INCPATH=${LIBPATH}/include
+ if [[ -d ${ROOT}/${INCPATH} ]] ; then
+ cd "${ROOT}/${INCPATH}" || exit 1
+ if [[ ${HOST} == ${TARGET} ]] ; then
+ # The binutils-lib package handles these files now.
+ for x in libiberty "${HEADERS[@]}" ; do
+ x="${ROOT}/usr/include/${x}"
+ if [[ -L ${x} ]] ; then
+ rm "${x}"
+ fi
+ done
+ else
+ # Clean out old path -- cannot use '-exec {} +' syntax here
+ find . -type f -exec rm -f "${ROOT}/usr/${TARGET}/usr/include/{}" \;
+ rmdir "${ROOT}/usr/${TARGET}/usr/include" >& /dev/null
+ rmdir "${ROOT}/usr/${TARGET}/usr" >& /dev/null
+ rmdir "${ROOT}/usr/${TARGET}" >& /dev/null
+ fi
+ fi
+
+ #
+ # Make sure proper paths get updated
+ #
+ local env_update_flag="--no-ldconfig"
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ # Delete old config now that binutils-libs installs these files.
+ # Note: This skips ldconfig update if env.d had LDPATH, but meh.
+ # Most people have upgraded to ld.so.conf.d, and someone else will
+ # eventually re-run ldconfig for us.
+ x="${ROOT}"/etc/ld.so.conf.d/05binutils.conf
+ if [[ -e ${x} ]]; then
+ rm -f "${x}"
+ env_update_flag=""
+ fi
+
+ DATAPATH=/usr/share/binutils-data/${TARGET}/${VER}
+ local e="${ROOT}"/etc/env.d/05binutils
+ local ee="${e}.tmp"
+ rm -f "${ee}"
+ [[ -d ${ROOT}/${DATAPATH}/man ]] && echo "MANPATH=${DATAPATH}/man" >> "${ee}"
+ [[ -d ${ROOT}/${DATAPATH}/info ]] && echo "INFOPATH=${DATAPATH}/info" >> "${ee}"
+ mv_if_diff "${ee}" "${e}"
+ fi
+
+ local c="${ENV_D}/config-${TARGET}"
+ local cc="${c}.tmp"
+ echo "CURRENT=${VER}" > "${cc}"
+ mv_if_diff "${cc}" "${c}"
+
+ eend 0
+
+ #
+ # Regen env.d if need/can be
+ #
+ if [[ ${ROOT} == "/" ]] && [[ ${TARGET} == ${HOST} ]] ; then
+ env-update ${env_update_flag}
+ echo
+ ewarn "Please remember to run:"
+ echo
+ ewarn " # . /etc/profile"
+ echo
+ fi
+
+ return 0
+}
+
+uninstall_target() {
+ : ${TARGET:=${UARG}}
+
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ die "refusing to uninstall native binutils"
+ fi
+
+ shopt -s nullglob
+ PROFILE=""
+
+ for PROFILE in "${ENV_D}"/${TARGET}-* ; do
+ ewarn "Removing all signs of ${PROFILE##*/}"
+ rm -f "${ENV_D}"/${PROFILE}
+ done
+ if [[ -z ${PROFILE} ]] && [[ ! -e ${ENV_D}/config-${TARGET} ]] ; then
+ die "no profiles exist for '${TARGET}'"
+ fi
+
+ rm -f "${ENV_D}"/config-${TARGET}
+
+ local x
+ for x in \
+ addr2line ar as c++filt elf2flt elfedit flthdr gprof \
+ ld ld.{bfd,gold,real} \
+ nm objcopy objdump ranlib readelf size strings strip
+ do
+ x=(
+ "${ROOT}"/usr/bin/${TARGET}-${x}
+ "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin/${x}
+ "${ROOT}"/usr/libexec/gcc/${TARGET}/${x}
+ )
+ rm -f "${x[@]}"
+ done
+ for x in "${HEADERS[@]}" ; do
+ rm -f "${ROOT}"/usr/{${HOST}/,}${TARGET}/{usr/,}include/${x}
+ done
+ for x in bfd iberty opcodes ; do
+ rm -f "${ROOT}"/usr/${HOST}/${TARGET}/lib/lib${x}{{-*,}.so,.a,.la}
+ done
+ # Delete broken symlinks
+ local destdir="${ROOT}/usr/${HOST}/${TARGET}"
+ rm -f "${destdir}"/lib/ldscripts
+ find -L "${destdir}"/lib -type l -exec rm {} +
+ rmdir \
+ "${destdir}"/{bin,include,lib,usr} \
+ "${destdir}" \
+ "${ROOT}"/var/db/pkg/cross-${TARGET} \
+ "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin \
+ "${ROOT}"/usr/libexec/gcc/${TARGET} \
+ 2>/dev/null
+
+ rm -f "${ENV_D}"/${TARGET}-*
+}
+
+set_current_profile() {
+ if [[ ! -f ${ENV_D}/config-${TARGET} ]] ; then
+ eerror "${argv0}: unable to locate a profile for target: ${TARGET}"
+ return 1
+ fi
+
+ source "${ENV_D}/config-${TARGET}"
+
+ if [[ -z ${CURRENT} ]] ; then
+ eerror "${argv0}: no binutils profile is active!"
+ return 1
+ fi
+
+ echo "${TARGET}-${CURRENT}"
+
+ return 0
+}
+get_current_profile() { echo "${PROFILE}" ; }
+
+list_profiles() {
+ local x i target
+
+ if [[ ${ROOT} != / ]] ; then
+ echo "Using binutils-config info in ${ROOT}"
+ fi
+
+ set -- "${ENV_D}"/*
+ target=
+ i=1
+
+ for x ; do
+ # skip broken links and config files
+ [[ -f ${x} ]] || continue
+ [[ ${x} == */config-* ]] && continue
+
+ source "${x}"
+ if [[ ${target} != ${TARGET} ]] ; then
+ [[ -n ${target} ]] && echo
+ target=${TARGET}
+ fi
+
+ x=${x##*/}
+ if [[ -e ${ENV_D}/config-${TARGET} ]] ; then
+ source "${ENV_D}/config-${TARGET}"
+ if [[ ${VER} == ${CURRENT} ]] ; then
+ [[ ${TARGET} == ${HOST} ]] \
+ && x="${x} ${GOOD}*${NORMAL}" \
+ || x="${x} ${HILITE}*${NORMAL}"
+ fi
+ fi
+
+ # We would align the [...] field like so:
+ #printf ' [%*ss] %s\n' ${##} "${i}" "${x}"
+ # but this breaks simple scripting: `binutils -l | awk '{print $2}'`
+
+ # Or we could align the target col like so:
+ #printf ' [%s]%*s %s\n' "${i}" $(( ${##} - ${#i} )) "" "${x}"
+ # but i'm not sold that it looks better
+
+ # So keep it simple ... only makes a diff anyways for crazy people
+ # like me which have 100+ binutils packages installed ...
+ echo " [$i] ${x}"
+ ((++i))
+ done
+}
+
+switch_linker() {
+ local bpath ld=$1
+
+ case ${ld} in
+ ld.*) ;;
+ *) die "not supported: linker must start with 'ld.'" ;;
+ esac
+
+ setup_env || return 1
+ bpath="${ROOT}/${BINPATH}"
+
+ # does this binutils even support the requested linker ?
+ if [[ ! -e ${bpath}/${ld} ]] ; then
+ die "sorry, but ${PROFILE} doesn't support the ${ld} linker"
+ fi
+
+ # switch it up
+ ebegin "Setting default linker to ${ld} for ${PROFILE}"
+ atomic_ln ${ld} "${bpath}" ld
+ eend $?
+}
+
+set_HOST() {
+ # Set HOST to CHOST if it isn't already set
+ : ${HOST:=${CHOST:-$(portageq envvar CHOST)}}
+}
+
+ENV_D="${ROOT}etc/env.d/binutils"
+
+DEBUG="no"
+NEED_ACTION="yes"
+DOIT="switch_profile"
+PROFILE="current"
+HOST=""
+TARGET=""
+unset UARG
+
+select_action() {
+ if [[ ${NEED_ACTION} != "no" ]] ; then
+ NEED_ACTION="no"
+ DOIT=$1
+ else
+ die "one action at a time!"
+ fi
+}
+
+while [[ $# -gt 0 ]] ; do
+ x=$1
+ shift
+ case ${x} in
+ -c|--get-current-profile) select_action get_current_profile ;;
+ -l|--list|--list-profiles) select_action list_profiles ;;
+ -u|--uninstall) select_action uninstall_target ;;
+ --linker) select_action "switch_linker $1"; shift ;;
+ -d|--debug) DEBUG="yes" ;;
+ -h|--help) usage 0 ;;
+ -V|--version)
+ unset Header
+ cvsver="$Id$"
+ cvsver=${cvsver##*binutils-config-}
+ bver=${cvsver%%,v *}
+ cvsver=${cvsver#* }
+ echo "binutils-config-${bver} (r${cvsver%% *})"
+ exit 0
+ ;;
+ -*)
+ die "invalid switch! Try '--help'."
+ ;;
+ *)
+ if [[ ${UARG+set} == "set" ]] ; then
+ die "only one profile/target at a time please"
+ fi
+ NEED_ACTION="maybe"
+ UARG=${x}
+ ;;
+ esac
+done
+
+[[ ${NEED_ACTION} == "yes" ]] && usage 1
+[[ ${DEBUG} == "yes" ]] && set -x
+
+# All operations need to know the current HOST to figure out
+# what is a native target and what is a cross target
+set_HOST
+
+# All operations need to know the profile the user wants
+case ${DOIT} in
+switch_profile|switch_linker_*)
+ # decode user's profile choice
+ x=${UARG:-$(TARGET=${HOST} set_current_profile)}
+ PROFILE=""
+ if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
+ # User gave us a # representing the profile
+ i=1
+ for y in "${ENV_D}"/* ; do
+ [[ ${y/config-} != ${y} ]] && continue
+
+ if [[ -f ${y} ]] && [[ ${x} -eq ${i} ]] ; then
+ PROFILE=${y##*/}
+ break
+ fi
+ ((++i))
+ done
+ fi
+
+ if [[ -z ${PROFILE} ]] ; then
+ # User gave us a full HOST-ver
+ x=${x##*/}
+ if [[ -f ${ENV_D}/${x} ]] ; then
+ # Valid HOST-ver yeah!
+ PROFILE=${x}
+ else
+ # Not a valid HOST-ver ...
+ if [[ ! -f ${ENV_D}/config-${x} ]] ; then
+ # Maybe they just gave us a ver ...
+ if [[ -f ${ENV_D}/${HOST}-${x} ]] ; then
+ x=${HOST}-${x}
+ else
+ die "could not locate '$x' in '${ENV_D}/'!"
+ fi
+ PROFILE=${x}
+ else
+ # Maybe they just gave us a target ... pick active profile
+ PROFILE=$(TARGET=${x} set_current_profile)
+ fi
+ fi
+ fi
+ ;;
+*)
+ # lookup current profile as the user gave us a target
+ PROFILE=$(TARGET=${UARG:-${HOST}} set_current_profile) || exit 1
+ ;;
+esac
+
+eval ${DOIT}
+
+# vim:ts=4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2015-11-23 10:23 Mike Frysinger
0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2015-11-23 10:23 UTC (permalink / raw
To: gentoo-commits
commit: 7fbeab2ed7339b602b134a2bba4016e977266a54
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Mon Nov 23 10:19:00 2015 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Mon Nov 23 10:21:58 2015 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7fbeab2e
sys-devel/binutils-config: detect broken cross-compiler rpaths #562460
We've fixed newer cross-binutils builds to use the correct rpaths to find
their internal libs, but existing builds remain broken. Add some logic to
detect & warn users, but also create the old symlinks so they keep working.
...inutils-config-5-r1.ebuild => binutils-config-5-r2.ebuild} | 0
sys-devel/binutils-config/files/binutils-config-5 | 11 ++++++++++-
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/sys-devel/binutils-config/binutils-config-5-r1.ebuild b/sys-devel/binutils-config/binutils-config-5-r2.ebuild
similarity index 100%
rename from sys-devel/binutils-config/binutils-config-5-r1.ebuild
rename to sys-devel/binutils-config/binutils-config-5-r2.ebuild
diff --git a/sys-devel/binutils-config/files/binutils-config-5 b/sys-devel/binutils-config/files/binutils-config-5
index 86f6abc..2bdd07e 100755
--- a/sys-devel/binutils-config/files/binutils-config-5
+++ b/sys-devel/binutils-config/files/binutils-config-5
@@ -149,7 +149,16 @@ switch_profile() {
mkdir -p "${dstlib}"
rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
- find -L "${dstlib}" -xtype l -name 'lib*' -exec rm -f {} +
+ find -L "${dstlib}" -xtype l -name 'lib*' -delete
+ # Detect older binutils w/broken rpaths. #562460
+ # We can hardcode the "/lib" part since that's what the binutils
+ # configure scripts have. They did not include any other path.
+ if [[ $(scanelf -qF '%r#F' "${ROOT}/${BINPATH}/as") == */lib ]] ; then
+ ewarn "Old cross-binutils detected; please re-emerge to fix (see bug #562460)."
+ for x in lib* ; do
+ atomic_ln "${LIBPATH}/${x}" "${dstlib}" "${x}"
+ done
+ fi
#
# Clean out old generated include symlinks
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2017-03-12 21:44 Mike Frysinger
0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2017-03-12 21:44 UTC (permalink / raw
To: gentoo-commits
commit: 28add2ebc7fe39d083343f5738f290d7e591d146
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 12 21:39:31 2017 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Sun Mar 12 21:40:10 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=28add2eb
sys-devel/binutils-config: fix --version output #612438
.../{binutils-config-5-r2.ebuild => binutils-config-5-r3.ebuild} | 5 +++--
sys-devel/binutils-config/files/binutils-config-5 | 8 ++------
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/sys-devel/binutils-config/binutils-config-5-r2.ebuild b/sys-devel/binutils-config/binutils-config-5-r3.ebuild
similarity index 90%
rename from sys-devel/binutils-config/binutils-config-5-r2.ebuild
rename to sys-devel/binutils-config/binutils-config-5-r3.ebuild
index ac64d4eaa4b..6a486bdebf4 100644
--- a/sys-devel/binutils-config/binutils-config-5-r2.ebuild
+++ b/sys-devel/binutils-config/binutils-config-5-r3.ebuild
@@ -1,7 +1,7 @@
-# Copyright 1999-2016 Gentoo Foundation
+# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-EAPI="4"
+EAPI="5"
inherit prefix
@@ -23,6 +23,7 @@ S=${WORKDIR}
src_install() {
newbin "${FILESDIR}"/${PN}-${PV} ${PN}
use prefix && eprefixify "${ED}"/usr/bin/${PN}
+ sed -i "s:@PV@:${PVR}:g" "${ED}"/usr/bin/${PN} || die
doman "${FILESDIR}"/${PN}.8
insinto /usr/share/eselect/modules
diff --git a/sys-devel/binutils-config/files/binutils-config-5 b/sys-devel/binutils-config/files/binutils-config-5
index 4c0f36249a7..acb72b7e343 100755
--- a/sys-devel/binutils-config/files/binutils-config-5
+++ b/sys-devel/binutils-config/files/binutils-config-5
@@ -403,12 +403,8 @@ while [[ $# -gt 0 ]] ; do
-d|--debug) DEBUG="yes" ;;
-h|--help) usage 0 ;;
-V|--version)
- unset Header
- cvsver="$Id$"
- cvsver=${cvsver##*binutils-config-}
- bver=${cvsver%%,v *}
- cvsver=${cvsver#* }
- echo "binutils-config-${bver} (r${cvsver%% *})"
+ ver="@PV@"
+ echo "binutils-config-${ver/@'PV'@/git}"
exit 0
;;
-*)
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2017-03-12 21:44 Mike Frysinger
0 siblings, 0 replies; 8+ messages in thread
From: Mike Frysinger @ 2017-03-12 21:44 UTC (permalink / raw
To: gentoo-commits
commit: 47be211fa581cf0d04d2236469ffc911a364077c
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 12 21:36:10 2017 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Sun Mar 12 21:40:10 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=47be211f
sys-devel/binutils: drop old <5 versions
.../binutils-config/binutils-config-4-r2.ebuild | 23 -
.../binutils-config/binutils-config-4-r3.ebuild | 23 -
.../binutils-config/binutils-config-4-r4.ebuild | 27 --
sys-devel/binutils-config/files/binutils-config-4 | 464 ---------------------
4 files changed, 537 deletions(-)
diff --git a/sys-devel/binutils-config/binutils-config-4-r2.ebuild b/sys-devel/binutils-config/binutils-config-4-r2.ebuild
deleted file mode 100644
index 9a1606a6211..00000000000
--- a/sys-devel/binutils-config/binutils-config-4-r2.ebuild
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="4"
-
-DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
-SRC_URI=""
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-# We also RDEPEND on sys-apps/findutils which is in base @system
-RDEPEND="sys-apps/gentoo-functions"
-
-S=${WORKDIR}
-
-src_install() {
- newbin "${FILESDIR}"/${PN}-${PV} ${PN}
- doman "${FILESDIR}"/${PN}.8
-}
diff --git a/sys-devel/binutils-config/binutils-config-4-r3.ebuild b/sys-devel/binutils-config/binutils-config-4-r3.ebuild
deleted file mode 100644
index 81a2676d155..00000000000
--- a/sys-devel/binutils-config/binutils-config-4-r3.ebuild
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="4"
-
-DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
-SRC_URI=""
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-# We also RDEPEND on sys-apps/findutils which is in base @system
-RDEPEND="sys-apps/gentoo-functions"
-
-S=${WORKDIR}
-
-src_install() {
- newbin "${FILESDIR}"/${PN}-${PV} ${PN}
- doman "${FILESDIR}"/${PN}.8
-}
diff --git a/sys-devel/binutils-config/binutils-config-4-r4.ebuild b/sys-devel/binutils-config/binutils-config-4-r4.ebuild
deleted file mode 100644
index 84e0839f61b..00000000000
--- a/sys-devel/binutils-config/binutils-config-4-r4.ebuild
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI="4"
-
-DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
-SRC_URI=""
-
-LICENSE="GPL-2"
-SLOT="0"
-KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
-IUSE=""
-
-# We also RDEPEND on sys-apps/findutils which is in base @system
-RDEPEND="sys-apps/gentoo-functions
- !<app-admin/eselect-1.4.5"
-
-S=${WORKDIR}
-
-src_install() {
- newbin "${FILESDIR}"/${PN}-${PV} ${PN}
- doman "${FILESDIR}"/${PN}.8
-
- insinto /usr/share/eselect/modules
- doins "${FILESDIR}"/binutils.eselect
-}
diff --git a/sys-devel/binutils-config/files/binutils-config-4 b/sys-devel/binutils-config/files/binutils-config-4
deleted file mode 100644
index 605eb2058d9..00000000000
--- a/sys-devel/binutils-config/files/binutils-config-4
+++ /dev/null
@@ -1,464 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2015 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-# Format of /etc/env.d/binutils/:
-# config-TARGET: CURRENT=version for TARGET
-# TARGET-VER: has a TARGET and VER variable
-
-: ${ROOT:=/}
-[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
-[[ ${ROOT} != /* ]] && ROOT="${PWD%/}/${ROOT}"
-
-cd /
-
-trap ":" INT QUIT TSTP
-
-argv0=${0##*/}
-FUNCTIONS_SH="/lib/gentoo/functions.sh"
-source ${FUNCTIONS_SH} || {
- echo "${argv0}: Could not source ${FUNCTIONS_SH}!" 1>&2
- exit 1
-}
-esyslog() { :; }
-die() { eerror "${argv0}: $*"; exit 1; }
-umask 022
-
-usage() {
-cat << USAGE_END
-Usage: ${HILITE}binutils-config${NORMAL} ${GOOD}[options]${NORMAL} ${BRACKET}[binutils profile]${NORMAL}
-
-${HILITE}General Options:${NORMAL}
- ${GOOD}-c, --get-current-profile${NORMAL} Print current profile
- ${GOOD}-l, --list-profiles${NORMAL} Print a list of available profiles
- ${GOOD}-u, --uninstall${NORMAL} Remove all signs of specified target
- ${GOOD}-d, --debug${NORMAL} Execute with debug output
-
-${HILITE}General Cruft:${NORMAL}
- ${GOOD}--linker${NORMAL} <linker> Switch to specified linker (if supported)
-
-Profile names are of the form: ${BRACKET}<CTARGET>-<binutils version>${NORMAL}
-For example: ${BRACKET}i686-pc-linux-gnu-2.15.92.0.2${NORMAL}
-
-For more info, please see ${HILITE}binutils-config${NORMAL}(8).
-USAGE_END
-
- exit ${1:-1}
-}
-
-mv_if_diff() {
- if cmp -s "$1" "$2" ; then
- rm -f "$1"
- else
- mv -f "$1" "$2"
- fi
-}
-atomic_ln() {
- local target=$1 linkdir=$2 linkname=$3 linktmp linkfull
- linktmp="${linkdir}/.binutils-config.tmp.${linkname}"
- linkfull="${linkdir}/${linkname}"
- if [[ -d ${linkfull} ]] ; then
- # if linking to a dir, we need a little magic to
- # make it atomic since `mv -T` is not portable
- rm -rf "${linktmp}"
- mkdir -p "${linktmp}"
- ln -sf "${target}" "${linktmp}/${linkname}"
- mv "${linktmp}/${linkname}" "${linktmp}/../"
- rmdir "${linktmp}"
- else
- # `ln` will expand into unlink();symlink(); which
- # is not atomic for a small amount of time, but
- # `mv` is a single rename() call
- ln -sf "${target}" "${linktmp}"
- mv "${linktmp}" "${linkfull}"
- fi
-}
-
-setup_env() {
- unset TARGET VER LIBPATH
- source "${ENV_D}/${PROFILE}"
- if [[ -z ${TARGET} ]] ; then
- eerror "${PROFILE} is invalid (no \$TARGET defined) :("
- return 1
- fi
- if [[ -z ${VER} ]] ; then
- eerror "${PROFILE} is invalid (no \$VER defined) :("
- return 1
- fi
-
- #
- # Generate binary symlinks
- #
- BINPATH=""
- BINPATH_LINKS=""
- if [[ ${TARGET} != ${HOST} ]] ; then
- #
- # Newer paths: /usr/${HOST}/${TARGET}/...
- # Older paths: /usr/${TARGET}/...
- #
- if [[ -d ${ROOT}/usr/${HOST}/${TARGET}/binutils-bin/${VER} ]] ; then
- BINPATH=/usr/${HOST}/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/libexec/gcc/${TARGET}
- fi
- fi
- if [[ -z ${BINPATH} ]] ; then
- BINPATH=/usr/${TARGET}/binutils-bin/${VER}
- BINPATH_LINKS=/usr/${TARGET}/bin
- fi
-}
-
-switch_profile() {
- ebegin "Switching to ${PROFILE}"
-
- setup_env || return 1
-
- cd "${ROOT}/${BINPATH}" || exit 1
- mkdir -p "${ROOT}/${BINPATH_LINKS}" "${ROOT}/usr/bin"
- for x in * ; do
- atomic_ln "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}" "${x}"
- atomic_ln "${BINPATH_LINKS}/${x}" "${ROOT}/usr/bin" "${TARGET}-${x}"
- if [[ ${TARGET} == ${HOST} ]] ; then
- atomic_ln "${TARGET}-${x}" "${ROOT}/usr/bin" "${x}"
- fi
- done
-
- #
- # Generate library / ldscripts symlinks
- #
- : ${LIBPATH:=/usr/lib/binutils/${TARGET}/${VER}}
- cd "${ROOT}/${LIBPATH}" || exit 1
- if [[ ${TARGET} == ${HOST} ]] ; then
- dstlib=${ROOT}/usr/${HOST}/lib
- else
- dstlib=${ROOT}/usr/${HOST}/${TARGET}/lib
- fi
- # When upgrading, we need to clean up ldscripts and libs
- mkdir -p "${dstlib}"
- rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
- atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
- find -L "${dstlib}" -type l -exec rm -v {} +
- for x in lib* ; do
- atomic_ln "${LIBPATH}/${x}" "${dstlib}" "${x}"
- done
-
- #
- # Generate include symlinks
- #
- INCPATH=${LIBPATH}/include
- if [[ -d ${ROOT}/${INCPATH} ]] ; then
- cd "${ROOT}/${INCPATH}" || exit 1
- if [[ ${HOST} == ${TARGET} ]] ; then
- mkdir -p "${ROOT}/usr/include"
- for x in * ; do
- atomic_ln "${INCPATH}/${x}" "${ROOT}/usr/include" "${x}"
- done
- else
- # Clean out old path -- cannot use '-exec {} +' syntax here
- find . -type f -exec rm -f "${ROOT}/usr/${TARGET}/usr/include/{}" \;
- rmdir "${ROOT}/usr/${TARGET}/usr/include" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}/usr" >& /dev/null
- rmdir "${ROOT}/usr/${TARGET}" >& /dev/null
- fi
- fi
-
- #
- # Make sure proper paths get updated
- #
- if [[ ${TARGET} == ${HOST} ]] ; then
- DATAPATH=/usr/share/binutils-data/${TARGET}/${VER}
- local e="${ROOT}"/etc/env.d/05binutils
- local ee="${e}.tmp"
- rm -f "${ee}"
- [[ -d ${ROOT}/${DATAPATH}/man ]] && echo "MANPATH=${DATAPATH}/man" >> "${ee}"
- [[ -d ${ROOT}/${DATAPATH}/info ]] && echo "INFOPATH=${DATAPATH}/info" >> "${ee}"
- # hmm, `ld` has this in SEARCH_DIR(), but ld.so does not ...
- if [[ -d ${ROOT}/etc/ld.so.conf.d ]] ; then
- local l="${ROOT}"/etc/ld.so.conf.d/05binutils.conf
- local ll="${l}.tmp"
- echo "/usr/${TARGET}/lib" > "${ll}"
- mv_if_diff "${ll}" "${l}"
- else
- echo "LDPATH=/usr/${TARGET}/lib" >> "${ee}"
- fi
- mv_if_diff "${ee}" "${e}"
- fi
-
- local c="${ENV_D}/config-${TARGET}"
- local cc="${c}.tmp"
- echo "CURRENT=${VER}" > "${cc}"
- mv_if_diff "${cc}" "${c}"
-
- eend 0
-
- #
- # Regen env.d if need/can be
- #
- if [[ ${ROOT} == "/" ]] && [[ ${TARGET} == ${HOST} ]] ; then
- env-update
- echo
- ewarn "Please remember to run:"
- echo
- ewarn " # . /etc/profile"
- echo
- fi
-
- return 0
-}
-
-uninstall_target() {
- : ${TARGET:=${UARG}}
-
- if [[ ${TARGET} == ${HOST} ]] ; then
- die "refusing to uninstall native binutils"
- fi
-
- shopt -s nullglob
- PROFILE=""
-
- for PROFILE in "${ENV_D}"/${TARGET}-* ; do
- ewarn "Removing all signs of ${PROFILE##*/}"
- rm -f "${ENV_D}"/${PROFILE}
- done
- if [[ -z ${PROFILE} ]] && [[ ! -e ${ENV_D}/config-${TARGET} ]] ; then
- die "no profiles exist for '${TARGET}'"
- fi
-
- rm -f "${ENV_D}"/config-${TARGET}
-
- local x
- for x in \
- addr2line ar as c++filt elf2flt elfedit flthdr gprof \
- ld ld.{bfd,gold,real} \
- nm objcopy objdump ranlib readelf size strings strip
- do
- x=(
- "${ROOT}"/usr/bin/${TARGET}-${x}
- "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin/${x}
- "${ROOT}"/usr/libexec/gcc/${TARGET}/${x}
- )
- rm -f "${x[@]}"
- done
- for x in ansidecl.h bfd.h bfdlink.h dis-asm.h symcat.h ; do
- rm -f "${ROOT}"/usr/{${HOST}/,}${TARGET}/{usr/,}include/${x}
- done
- for x in bfd iberty opcodes ; do
- rm -f "${ROOT}"/usr/${HOST}/${TARGET}/lib/lib${x}{{-*,}.so,.a,.la}
- done
- # Delete broken symlinks
- local destdir="${ROOT}/usr/${HOST}/${TARGET}"
- rm -f "${destdir}"/lib/ldscripts
- find -L "${destdir}"/lib -type l -exec rm {} +
- rmdir \
- "${destdir}"/{bin,include,lib,usr} \
- "${destdir}" \
- "${ROOT}"/var/db/pkg/cross-${TARGET} \
- "${ROOT}"/usr/{${HOST}/,}${TARGET}/bin \
- "${ROOT}"/usr/libexec/gcc/${TARGET} \
- 2>/dev/null
-
- rm -f "${ENV_D}"/${TARGET}-*
-}
-
-set_current_profile() {
- if [[ ! -f ${ENV_D}/config-${TARGET} ]] ; then
- eerror "${argv0}: unable to locate a profile for target: ${TARGET}"
- return 1
- fi
-
- source "${ENV_D}/config-${TARGET}"
-
- if [[ -z ${CURRENT} ]] ; then
- eerror "${argv0}: no binutils profile is active!"
- return 1
- fi
-
- echo "${TARGET}-${CURRENT}"
-
- return 0
-}
-get_current_profile() { echo "${PROFILE}" ; }
-
-list_profiles() {
- local x i target
-
- if [[ ${ROOT} != / ]] ; then
- echo "Using binutils-config info in ${ROOT}"
- fi
-
- set -- "${ENV_D}"/*
- target=
- i=1
-
- for x ; do
- # skip broken links and config files
- [[ -f ${x} ]] || continue
- [[ ${x} == */config-* ]] && continue
-
- source "${x}"
- if [[ ${target} != ${TARGET} ]] ; then
- [[ -n ${target} ]] && echo
- target=${TARGET}
- fi
-
- x=${x##*/}
- if [[ -e ${ENV_D}/config-${TARGET} ]] ; then
- source "${ENV_D}/config-${TARGET}"
- if [[ ${VER} == ${CURRENT} ]] ; then
- [[ ${TARGET} == ${HOST} ]] \
- && x="${x} ${GOOD}*${NORMAL}" \
- || x="${x} ${HILITE}*${NORMAL}"
- fi
- fi
-
- # We would align the [...] field like so:
- #printf ' [%*ss] %s\n' ${##} "${i}" "${x}"
- # but this breaks simple scripting: `binutils -l | awk '{print $2}'`
-
- # Or we could align the target col like so:
- #printf ' [%s]%*s %s\n' "${i}" $(( ${##} - ${#i} )) "" "${x}"
- # but i'm not sold that it looks better
-
- # So keep it simple ... only makes a diff anyways for crazy people
- # like me which have 100+ binutils packages installed ...
- echo " [$i] ${x}"
- ((++i))
- done
-}
-
-switch_linker() {
- local bpath ld=$1
-
- case ${ld} in
- ld.*) ;;
- *) die "not supported: linker must start with 'ld.'" ;;
- esac
-
- setup_env || return 1
- bpath="${ROOT}/${BINPATH}"
-
- # does this binutils even support the requested linker ?
- if [[ ! -e ${bpath}/${ld} ]] ; then
- die "sorry, but ${PROFILE} doesn't support the ${ld} linker"
- fi
-
- # switch it up
- ebegin "Setting default linker to ${ld} for ${PROFILE}"
- atomic_ln ${ld} "${bpath}" ld
- eend $?
-}
-
-set_HOST() {
- # Set HOST to CHOST if it isn't already set
- : ${HOST:=${CHOST:-$(portageq envvar CHOST)}}
-}
-
-ENV_D="${ROOT}etc/env.d/binutils"
-
-DEBUG="no"
-NEED_ACTION="yes"
-DOIT="switch_profile"
-PROFILE="current"
-HOST=""
-TARGET=""
-unset UARG
-
-select_action() {
- if [[ ${NEED_ACTION} != "no" ]] ; then
- NEED_ACTION="no"
- DOIT=$1
- else
- die "one action at a time!"
- fi
-}
-
-while [[ $# -gt 0 ]] ; do
- x=$1
- shift
- case ${x} in
- -c|--get-current-profile) select_action get_current_profile ;;
- -l|--list|--list-profiles) select_action list_profiles ;;
- -u|--uninstall) select_action uninstall_target ;;
- --linker) select_action "switch_linker $1"; shift ;;
- -d|--debug) DEBUG="yes" ;;
- -h|--help) usage 0 ;;
- -V|--version)
- unset Header
- cvsver="$Id$"
- cvsver=${cvsver##*binutils-config-}
- bver=${cvsver%%,v *}
- cvsver=${cvsver#* }
- echo "binutils-config-${bver} (r${cvsver%% *})"
- exit 0
- ;;
- -*)
- die "invalid switch! Try '--help'."
- ;;
- *)
- if [[ ${UARG+set} == "set" ]] ; then
- die "only one profile/target at a time please"
- fi
- NEED_ACTION="maybe"
- UARG=${x}
- ;;
- esac
-done
-
-[[ ${NEED_ACTION} == "yes" ]] && usage 1
-[[ ${DEBUG} == "yes" ]] && set -x
-
-# All operations need to know the current HOST to figure out
-# what is a native target and what is a cross target
-set_HOST
-
-# All operations need to know the profile the user wants
-case ${DOIT} in
-switch_profile|switch_linker_*)
- # decode user's profile choice
- x=${UARG:-$(TARGET=${HOST} set_current_profile)}
- PROFILE=""
- if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
- # User gave us a # representing the profile
- i=1
- for y in "${ENV_D}"/* ; do
- [[ ${y/config-} != ${y} ]] && continue
-
- if [[ -f ${y} ]] && [[ ${x} -eq ${i} ]] ; then
- PROFILE=${y##*/}
- break
- fi
- ((++i))
- done
- fi
-
- if [[ -z ${PROFILE} ]] ; then
- # User gave us a full HOST-ver
- x=${x##*/}
- if [[ -f ${ENV_D}/${x} ]] ; then
- # Valid HOST-ver yeah!
- PROFILE=${x}
- else
- # Not a valid HOST-ver ...
- if [[ ! -f ${ENV_D}/config-${x} ]] ; then
- # Maybe they just gave us a ver ...
- if [[ -f ${ENV_D}/${HOST}-${x} ]] ; then
- x=${HOST}-${x}
- else
- die "could not locate '$x' in '${ENV_D}/'!"
- fi
- PROFILE=${x}
- else
- # Maybe they just gave us a target ... pick active profile
- PROFILE=$(TARGET=${x} set_current_profile)
- fi
- fi
- fi
- ;;
-*)
- # lookup current profile as the user gave us a target
- PROFILE=$(TARGET=${UARG:-${HOST}} set_current_profile) || exit 1
- ;;
-esac
-
-eval ${DOIT}
-
-# vim:ts=4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2017-12-18 20:06 Andreas Hüttel
0 siblings, 0 replies; 8+ messages in thread
From: Andreas Hüttel @ 2017-12-18 20:06 UTC (permalink / raw
To: gentoo-commits
commit: 34d824e5f3753b948cd0fc8aa529f5e27e5ebb28
Author: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Mon Dec 18 20:05:57 2017 +0000
Commit: Andreas Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Mon Dec 18 20:06:12 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=34d824e5
sys-devel/binutils-config: Version bump for bug 584296
Closes: https://bugs.gentoo.org/584296
Package-Manager: Portage-2.3.19, Repoman-2.3.6
.../binutils-config/binutils-config-5.1.ebuild | 45 ++
.../binutils-config/files/binutils-config-5.1 | 477 +++++++++++++++++++++
2 files changed, 522 insertions(+)
diff --git a/sys-devel/binutils-config/binutils-config-5.1.ebuild b/sys-devel/binutils-config/binutils-config-5.1.ebuild
new file mode 100644
index 00000000000..ef7b1bd5c11
--- /dev/null
+++ b/sys-devel/binutils-config/binutils-config-5.1.ebuild
@@ -0,0 +1,45 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+inherit prefix
+
+DESCRIPTION="Utility to change the binutils version being used"
+HOMEPAGE="https://www.gentoo.org/"
+SRC_URI=""
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~sparc-fbsd ~x86-fbsd"
+IUSE=""
+
+# We also RDEPEND on sys-apps/findutils which is in base @system
+RDEPEND="sys-apps/gentoo-functions
+ !<app-admin/eselect-1.4.5
+ !<sys-devel/binutils-2.25.1
+"
+
+S=${WORKDIR}
+
+src_install() {
+ newbin "${FILESDIR}"/${PN}-${PV} ${PN}
+ use prefix && eprefixify "${ED}"/usr/bin/${PN}
+ sed -i "s:@PV@:${PVR}:g" "${ED}"/usr/bin/${PN} || die
+ doman "${FILESDIR}"/${PN}.8
+
+ insinto /usr/share/eselect/modules
+ doins "${FILESDIR}"/binutils.eselect
+}
+
+pkg_preinst() {
+ # Force a refresh when upgrading from an older version that symlinked
+ # in all the libs & includes that binutils-libs handles. #528088
+ if has_version "<${CATEGORY}/${PN}-5" ; then
+ local bc current
+ bc="${ED}/usr/bin/binutils-config"
+ if current=$("${bc}" -c) ; then
+ "${bc}" "${current}"
+ fi
+ fi
+}
diff --git a/sys-devel/binutils-config/files/binutils-config-5.1 b/sys-devel/binutils-config/files/binutils-config-5.1
new file mode 100644
index 00000000000..945295c3e3a
--- /dev/null
+++ b/sys-devel/binutils-config/files/binutils-config-5.1
@@ -0,0 +1,477 @@
+#!/bin/bash
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# Format of /etc/env.d/binutils/:
+# config-TARGET: CURRENT=version for TARGET
+# TARGET-VER: has a TARGET and VER variable
+
+EPREFIX="@GENTOO_PORTAGE_EPREFIX@"
+if [[ ${EPREFIX} == "@"GENTOO_PORTAGE_EPREFIX"@" ]] ; then
+ EPREFIX=""
+fi
+
+: ${ROOT:=/}
+[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
+[[ ${ROOT} != /* ]] && ROOT="${PWD%/}/${ROOT}"
+
+EROOT="${ROOT%/}${EPREFIX}/"
+
+cd "${EPREFIX}/"
+
+trap ":" INT QUIT TSTP
+
+argv0=${0##*/}
+FUNCTIONS_SH="${EPREFIX}/lib/gentoo/functions.sh"
+source ${FUNCTIONS_SH} || {
+ echo "${argv0}: Could not source ${FUNCTIONS_SH}!" 1>&2
+ exit 1
+}
+esyslog() { :; }
+die() { eerror "${argv0}: $*"; exit 1; }
+umask 022
+
+usage() {
+cat << USAGE_END
+Usage: ${HILITE}binutils-config${NORMAL} ${GOOD}[options]${NORMAL} ${BRACKET}[binutils profile]${NORMAL}
+
+${HILITE}General Options:${NORMAL}
+ ${GOOD}-c, --get-current-profile${NORMAL} Print current profile
+ ${GOOD}-l, --list-profiles${NORMAL} Print a list of available profiles
+ ${GOOD}-u, --uninstall${NORMAL} Remove all signs of specified target
+ ${GOOD}-d, --debug${NORMAL} Execute with debug output
+
+${HILITE}General Cruft:${NORMAL}
+ ${GOOD}--linker${NORMAL} <linker> Switch to specified linker (if supported)
+
+Profile names are of the form: ${BRACKET}<CTARGET>-<binutils version>${NORMAL}
+For example: ${BRACKET}i686-pc-linux-gnu-2.15.92.0.2${NORMAL}
+
+For more info, please see ${HILITE}binutils-config${NORMAL}(8).
+USAGE_END
+
+ exit ${1:-1}
+}
+
+mv_if_diff() {
+ if cmp -s "$1" "$2" ; then
+ rm -f "$1"
+ else
+ mv -f "$1" "$2"
+ fi
+}
+atomic_ln() {
+ local target=$1 linkdir=$2 linkname=$3 linktmp linkfull
+ linktmp="${linkdir}/.binutils-config.tmp.${linkname}"
+ linkfull="${linkdir}/${linkname}"
+ if [[ -d ${linkfull} ]] ; then
+ # if linking to a dir, we need a little magic to
+ # make it atomic since `mv -T` is not portable
+ rm -rf "${linktmp}"
+ mkdir -p "${linktmp}"
+ ln -sf "${target}" "${linktmp}/${linkname}"
+ mv "${linktmp}/${linkname}" "${linktmp}/../"
+ rmdir "${linktmp}"
+ else
+ # `ln` will expand into unlink();symlink(); which
+ # is not atomic for a small amount of time, but
+ # `mv` is a single rename() call
+ ln -sf "${target}" "${linktmp}"
+ mv "${linktmp}" "${linkfull}"
+ fi
+}
+
+setup_env() {
+ unset TARGET VER LIBPATH
+ source "${ENV_D}/${PROFILE}"
+ if [[ -z ${TARGET} ]] ; then
+ eerror "${PROFILE} is invalid (no \$TARGET defined) :("
+ return 1
+ fi
+ if [[ -z ${VER} ]] ; then
+ eerror "${PROFILE} is invalid (no \$VER defined) :("
+ return 1
+ fi
+
+ #
+ # Generate binary symlinks
+ #
+ BINPATH=""
+ BINPATH_LINKS=""
+ if [[ ${TARGET} != ${HOST} ]] ; then
+ #
+ # Newer paths: /usr/${HOST}/${TARGET}/...
+ # Older paths: /usr/${TARGET}/...
+ #
+ if [[ -d "${EROOT}"/usr/${HOST}/${TARGET}/binutils-bin/${VER} ]] ; then
+ BINPATH="${EPREFIX}"/usr/${HOST}/${TARGET}/binutils-bin/${VER}
+ BINPATH_LINKS="${EPREFIX}"/usr/libexec/gcc/${TARGET}
+ fi
+ fi
+ if [[ -z ${BINPATH} ]] ; then
+ BINPATH="${EPREFIX}"/usr/${TARGET}/binutils-bin/${VER}
+ BINPATH_LINKS="${EPREFIX}"/usr/${TARGET}/bin
+ fi
+}
+
+# Lists of headers that various versions have installed.
+HEADERS=(
+ ansidecl.h bfd.h bfdlink.h demangle.h dis-asm.h dyn-string.h
+ fibheap.h hashtab.h libiberty.h objalloc.h plugin-api.h
+ splay-tree.h symcat.h
+)
+
+switch_profile() {
+ local x
+
+ ebegin "Switching to ${PROFILE}"
+
+ setup_env || return 1
+
+ cd "${ROOT}/${BINPATH}" || exit 1
+ mkdir -p "${ROOT}/${BINPATH_LINKS}" "${EROOT}/usr/bin"
+ for x in * ; do
+ atomic_ln "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}" "${x}"
+ atomic_ln "${BINPATH_LINKS}/${x}" "${EROOT}/usr/bin" "${TARGET}-${x}"
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ atomic_ln "${TARGET}-${x}" "${EROOT}/usr/bin" "${x}"
+ fi
+ done
+
+ #
+ # Generate library / ldscripts symlinks
+ #
+ : ${LIBPATH:=${EPREFIX}/usr/lib/binutils/${TARGET}/${VER}}
+ cd "${ROOT}/${LIBPATH}" || exit 1
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ dstlib=${EROOT}/usr/${HOST}/lib
+ elif [[ -d ${EROOT}/usr/${TARGET}/lib ]] ; then
+ # true for at least avr and msp targets
+ dstlib=${EROOT}/usr/${TARGET}/lib
+ else
+ dstlib=${EROOT}/usr/${HOST}/${TARGET}/lib
+ fi
+ # When upgrading, we need to clean up ldscripts and libs.
+ # Don't symlink back in the libs -- the binutils-lib package handles
+ # these now.
+ # TODO: Stop requiring even the ldscripts symlink, except
+ # we can't for bare-metal toolchains, so... bug #147155
+ mkdir -p "${dstlib}"
+ rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
+ atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
+ find -L "${dstlib}" -xtype l -name 'lib*' -exec rm -f {} +
+
+ #
+ # Clean out old generated include symlinks
+ #
+ INCPATH=${LIBPATH}/include
+ if [[ -d ${ROOT}/${INCPATH} ]] ; then
+ cd "${ROOT}/${INCPATH}" || exit 1
+ if [[ ${HOST} != ${TARGET} ]] ; then
+ # Clean out old path -- cannot use '-exec {} +' syntax here
+ find . -type f -exec rm -f "${EROOT}/usr/${TARGET}/usr/include/{}" \;
+ rmdir "${EROOT}/usr/${TARGET}/usr/include" >& /dev/null
+ rmdir "${EROOT}/usr/${TARGET}/usr" >& /dev/null
+ rmdir "${EROOT}/usr/${TARGET}" >& /dev/null
+ fi
+ fi
+
+ #
+ # Make sure proper paths get updated
+ #
+ local env_update_flag="--no-ldconfig"
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ # Delete old config now that binutils-libs installs these files.
+ # Note: This skips ldconfig update if env.d had LDPATH, but meh.
+ # Most people have upgraded to ld.so.conf.d, and someone else will
+ # eventually re-run ldconfig for us.
+ x="${EROOT}"/etc/ld.so.conf.d/05binutils.conf
+ if [[ -e ${x} ]]; then
+ rm -f "${x}"
+ env_update_flag=""
+ fi
+
+ DATAPATH="${EPREFIX}"/usr/share/binutils-data/${TARGET}/${VER}
+ local e="${EROOT}"/etc/env.d/05binutils
+ local ee="${e}.tmp"
+ rm -f "${ee}"
+ [[ -d ${ROOT}/${DATAPATH}/man ]] && echo "MANPATH=${DATAPATH}/man" >> "${ee}"
+ [[ -d ${ROOT}/${DATAPATH}/info ]] && echo "INFOPATH=${DATAPATH}/info" >> "${ee}"
+ mv_if_diff "${ee}" "${e}"
+ fi
+
+ local c="${ENV_D}/config-${TARGET}"
+ local cc="${c}.tmp"
+ echo "CURRENT=${VER}" > "${cc}"
+ mv_if_diff "${cc}" "${c}"
+
+ eend 0
+
+ #
+ # Regen env.d if need/can be
+ #
+ if [[ ${ROOT} == "/" ]] && [[ ${TARGET} == ${HOST} ]] ; then
+ env-update ${env_update_flag}
+ echo
+ ewarn "Please remember to run:"
+ echo
+ ewarn " # . ${EPREFIX}/etc/profile"
+ echo
+ fi
+
+ return 0
+}
+
+uninstall_target() {
+ : ${TARGET:=${UARG}}
+
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ die "refusing to uninstall native binutils"
+ fi
+
+ shopt -s nullglob
+ PROFILE=""
+
+ for PROFILE in "${ENV_D}"/${TARGET}-* ; do
+ ewarn "Removing all signs of ${PROFILE##*/}"
+ rm -f "${ENV_D}"/${PROFILE}
+ done
+ if [[ -z ${PROFILE} ]] && [[ ! -e ${ENV_D}/config-${TARGET} ]] ; then
+ die "no profiles exist for '${TARGET}'"
+ fi
+
+ rm -f "${ENV_D}"/config-${TARGET}
+
+ local x
+ for x in \
+ addr2line ar as c++filt elf2flt elfedit flthdr gprof \
+ ld ld.{bfd,gold,real} \
+ nm objcopy objdump ranlib readelf size strings strip
+ do
+ x=(
+ "${EROOT}"/usr/bin/${TARGET}-${x}
+ "${EROOT}"/usr/{${HOST}/,}${TARGET}/bin/${x}
+ "${EROOT}"/usr/libexec/gcc/${TARGET}/${x}
+ )
+ rm -f "${x[@]}"
+ done
+ for x in "${HEADERS[@]}" ; do
+ rm -f "${EROOT}"/usr/{${HOST}/,}${TARGET}/{usr/,}include/${x}
+ done
+ for x in bfd iberty opcodes ; do
+ rm -f "${EROOT}"/usr/${HOST}/${TARGET}/lib/lib${x}{{-*,}.so,.a,.la}
+ done
+ # Delete broken symlinks
+ local destdir="${EROOT}/usr/${HOST}/${TARGET}"
+ rm -f "${destdir}"/lib/ldscripts
+ find -L "${destdir}"/lib -type l -exec rm {} +
+ rmdir \
+ "${destdir}"/{bin,include,lib,usr} \
+ "${destdir}" \
+ "${EROOT}"/var/db/pkg/cross-${TARGET} \
+ "${EROOT}"/usr/{${HOST}/,}${TARGET}/bin \
+ "${EROOT}"/usr/libexec/gcc/${TARGET} \
+ 2>/dev/null
+
+ rm -f "${ENV_D}"/${TARGET}-*
+}
+
+set_current_profile() {
+ if [[ ! -f ${ENV_D}/config-${TARGET} ]] ; then
+ eerror "${argv0}: unable to locate a profile for target: ${TARGET}"
+ return 1
+ fi
+
+ source "${ENV_D}/config-${TARGET}"
+
+ if [[ -z ${CURRENT} ]] ; then
+ eerror "${argv0}: no binutils profile is active!"
+ return 1
+ fi
+
+ echo "${TARGET}-${CURRENT}"
+
+ return 0
+}
+get_current_profile() { echo "${PROFILE}" ; }
+
+list_profiles() {
+ local x i target
+
+ if [[ ${ROOT} != / ]] ; then
+ echo "Using binutils-config info in ${ROOT}"
+ fi
+
+ set -- "${ENV_D}"/*
+ target=
+ i=1
+
+ for x ; do
+ # skip broken links and config files
+ [[ -f ${x} ]] || continue
+ [[ ${x} == */config-* ]] && continue
+
+ source "${x}"
+ if [[ ${target} != ${TARGET} ]] ; then
+ [[ -n ${target} ]] && echo
+ target=${TARGET}
+ fi
+
+ x=${x##*/}
+ if [[ -e ${ENV_D}/config-${TARGET} ]] ; then
+ source "${ENV_D}/config-${TARGET}"
+ if [[ ${VER} == ${CURRENT} ]] ; then
+ [[ ${TARGET} == ${HOST} ]] \
+ && x="${x} ${GOOD}*${NORMAL}" \
+ || x="${x} ${HILITE}*${NORMAL}"
+ fi
+ fi
+
+ # We would align the [...] field like so:
+ #printf ' [%*ss] %s\n' ${##} "${i}" "${x}"
+ # but this breaks simple scripting: `binutils -l | awk '{print $2}'`
+
+ # Or we could align the target col like so:
+ #printf ' [%s]%*s %s\n' "${i}" $(( ${##} - ${#i} )) "" "${x}"
+ # but i'm not sold that it looks better
+
+ # So keep it simple ... only makes a diff anyways for crazy people
+ # like me which have 100+ binutils packages installed ...
+ echo " [$i] ${x}"
+ ((++i))
+ done
+}
+
+switch_linker() {
+ local bpath ld=$1
+
+ case ${ld} in
+ ld.*) ;;
+ *) die "not supported: linker must start with 'ld.'" ;;
+ esac
+
+ setup_env || return 1
+ bpath="${ROOT}/${BINPATH}"
+
+ # does this binutils even support the requested linker ?
+ if [[ ! -e ${bpath}/${ld} ]] ; then
+ die "sorry, but ${PROFILE} doesn't support the ${ld} linker"
+ fi
+
+ # switch it up
+ ebegin "Setting default linker to ${ld} for ${PROFILE}"
+ atomic_ln ${ld} "${bpath}" ld
+ eend $?
+}
+
+set_HOST() {
+ # Set HOST to CHOST if it isn't already set
+ : ${HOST:=${CHOST:-$(portageq envvar CHOST)}}
+}
+
+ENV_D="${EROOT}etc/env.d/binutils"
+
+DEBUG="no"
+NEED_ACTION="yes"
+DOIT="switch_profile"
+PROFILE="current"
+HOST=""
+TARGET=""
+unset UARG
+
+select_action() {
+ if [[ ${NEED_ACTION} != "no" ]] ; then
+ NEED_ACTION="no"
+ DOIT=$1
+ else
+ die "one action at a time!"
+ fi
+}
+
+while [[ $# -gt 0 ]] ; do
+ x=$1
+ shift
+ case ${x} in
+ -c|--get-current-profile) select_action get_current_profile ;;
+ -l|--list|--list-profiles) select_action list_profiles ;;
+ -u|--uninstall) select_action uninstall_target ;;
+ --linker) select_action "switch_linker $1"; shift ;;
+ -d|--debug) DEBUG="yes" ;;
+ -h|--help) usage 0 ;;
+ -V|--version)
+ ver="@PV@"
+ echo "binutils-config-${ver/@'PV'@/git}"
+ exit 0
+ ;;
+ -*)
+ die "invalid switch! Try '--help'."
+ ;;
+ *)
+ if [[ ${UARG+set} == "set" ]] ; then
+ die "only one profile/target at a time please"
+ fi
+ NEED_ACTION="maybe"
+ UARG=${x}
+ ;;
+ esac
+done
+
+[[ ${NEED_ACTION} == "yes" ]] && usage 1
+[[ ${DEBUG} == "yes" ]] && set -x
+
+# All operations need to know the current HOST to figure out
+# what is a native target and what is a cross target
+set_HOST
+
+# All operations need to know the profile the user wants
+case ${DOIT} in
+switch_profile|switch_linker_*)
+ # decode user's profile choice
+ x=${UARG:-$(TARGET=${HOST} set_current_profile)}
+ PROFILE=""
+ if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
+ # User gave us a # representing the profile
+ i=1
+ for y in "${ENV_D}"/* ; do
+ [[ ${y/config-} != ${y} ]] && continue
+
+ if [[ -f ${y} ]] && [[ ${x} -eq ${i} ]] ; then
+ PROFILE=${y##*/}
+ break
+ fi
+ ((++i))
+ done
+ fi
+
+ if [[ -z ${PROFILE} ]] ; then
+ # User gave us a full HOST-ver
+ x=${x##*/}
+ if [[ -f ${ENV_D}/${x} ]] ; then
+ # Valid HOST-ver yeah!
+ PROFILE=${x}
+ else
+ # Not a valid HOST-ver ...
+ if [[ ! -f ${ENV_D}/config-${x} ]] ; then
+ # Maybe they just gave us a ver ...
+ if [[ -f ${ENV_D}/${HOST}-${x} ]] ; then
+ x=${HOST}-${x}
+ else
+ die "could not locate '$x' in '${ENV_D}/'!"
+ fi
+ PROFILE=${x}
+ else
+ # Maybe they just gave us a target ... pick active profile
+ PROFILE=$(TARGET=${x} set_current_profile)
+ fi
+ fi
+ fi
+ ;;
+*)
+ # lookup current profile as the user gave us a target
+ PROFILE=$(TARGET=${UARG:-${HOST}} set_current_profile) || exit 1
+ ;;
+esac
+
+eval ${DOIT}
+
+# vim:ts=4
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2017-12-30 22:52 Mike Gilbert
0 siblings, 0 replies; 8+ messages in thread
From: Mike Gilbert @ 2017-12-30 22:52 UTC (permalink / raw
To: gentoo-commits
commit: c9c48c989410c9aaf6e2cb6b0a51e6551fc97f29
Author: Mike Gilbert <floppym <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 30 22:47:19 2017 +0000
Commit: Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Sat Dec 30 22:49:55 2017 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=c9c48c98
Revert "sys-devel/binutils-config: add avr/msp symlink handling"
This reverts commit 1b129b82462191f6adf022a2327d5b3a72dcb893.
This change caused symlinks to go missing under /usr/${CTARGET}/lib for
"normal" cross toolchains. Anothoer solution is needed for avr/msp.
Closes: https://bugs.gentoo.org/642738
.../{binutils-config-5-r3.ebuild => binutils-config-5-r4.ebuild} | 0
.../{binutils-config-5.1.ebuild => binutils-config-5.1-r1.ebuild} | 0
sys-devel/binutils-config/files/binutils-config-5 | 8 ++------
sys-devel/binutils-config/files/binutils-config-5.1 | 6 +-----
4 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/sys-devel/binutils-config/binutils-config-5-r3.ebuild b/sys-devel/binutils-config/binutils-config-5-r4.ebuild
similarity index 100%
rename from sys-devel/binutils-config/binutils-config-5-r3.ebuild
rename to sys-devel/binutils-config/binutils-config-5-r4.ebuild
diff --git a/sys-devel/binutils-config/binutils-config-5.1.ebuild b/sys-devel/binutils-config/binutils-config-5.1-r1.ebuild
similarity index 100%
rename from sys-devel/binutils-config/binutils-config-5.1.ebuild
rename to sys-devel/binutils-config/binutils-config-5.1-r1.ebuild
diff --git a/sys-devel/binutils-config/files/binutils-config-5 b/sys-devel/binutils-config/files/binutils-config-5
index e6c5fac0026..acb72b7e343 100755
--- a/sys-devel/binutils-config/files/binutils-config-5
+++ b/sys-devel/binutils-config/files/binutils-config-5
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright 1999-2017 Gentoo Foundation
+# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# Format of /etc/env.d/binutils/:
@@ -145,17 +145,13 @@ switch_profile() {
cd "${ROOT}/${LIBPATH}" || exit 1
if [[ ${TARGET} == ${HOST} ]] ; then
dstlib=${EROOT}/usr/${HOST}/lib
- elif [[ -d ${EROOT}/usr/${TARGET}/lib ]] ; then
- # true for at least avr and msp targets
- dstlib=${EROOT}/usr/${TARGET}/lib
else
dstlib=${EROOT}/usr/${HOST}/${TARGET}/lib
fi
# When upgrading, we need to clean up ldscripts and libs.
# Don't symlink back in the libs -- the binutils-lib package handles
# these now.
- # TODO: Stop requiring even the ldscripts symlink, except
- # we can't for bare-metal toolchains, so... bug #147155
+ # TODO: Stop requiring even the ldscripts symlink.
mkdir -p "${dstlib}"
rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
diff --git a/sys-devel/binutils-config/files/binutils-config-5.1 b/sys-devel/binutils-config/files/binutils-config-5.1
index 945295c3e3a..ec06d47c14a 100644
--- a/sys-devel/binutils-config/files/binutils-config-5.1
+++ b/sys-devel/binutils-config/files/binutils-config-5.1
@@ -145,17 +145,13 @@ switch_profile() {
cd "${ROOT}/${LIBPATH}" || exit 1
if [[ ${TARGET} == ${HOST} ]] ; then
dstlib=${EROOT}/usr/${HOST}/lib
- elif [[ -d ${EROOT}/usr/${TARGET}/lib ]] ; then
- # true for at least avr and msp targets
- dstlib=${EROOT}/usr/${TARGET}/lib
else
dstlib=${EROOT}/usr/${HOST}/${TARGET}/lib
fi
# When upgrading, we need to clean up ldscripts and libs.
# Don't symlink back in the libs -- the binutils-lib package handles
# these now.
- # TODO: Stop requiring even the ldscripts symlink, except
- # we can't for bare-metal toolchains, so... bug #147155
+ # TODO: Stop requiring even the ldscripts symlink.
mkdir -p "${dstlib}"
rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/
@ 2019-12-29 20:14 Sergei Trofimovich
0 siblings, 0 replies; 8+ messages in thread
From: Sergei Trofimovich @ 2019-12-29 20:14 UTC (permalink / raw
To: gentoo-commits
commit: bd195f1e0d49e664119adb29100dbd7a094bd008
Author: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 29 20:13:58 2019 +0000
Commit: Sergei Trofimovich <slyfox <AT> gentoo <DOT> org>
CommitDate: Sun Dec 29 20:13:58 2019 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=bd195f1e
sys-devel/binutils-config: drop runtime linker switch selection
Before this change there were 3 ways to switch default linker:
1. via LDFLAGS=-fuse-ld=gold LD=${CHOST}-ld.gold
2. via binutils' USE flags: USE="default-gold gold"
3. via *FLAGS=-B/path-to-own-tools
4. via 'binutils-config --linker'
This change drops [3.] entirely in favour of [1.] and [2.].
[1.] should be preferred.
Reported-by: Andrzej Korwin-Mikke
Closes: https://bugs.gentoo.org/658054
Package-Manager: Portage-2.3.84, Repoman-2.3.20
Signed-off-by: Sergei Trofimovich <slyfox <AT> gentoo.org>
.../binutils-config/binutils-config-5-r4.ebuild | 2 +-
.../binutils-config/binutils-config-5.1-r1.ebuild | 2 +-
...nfig-5-r4.ebuild => binutils-config-5.2.ebuild} | 6 +-
.../binutils-config/files/binutils-config-5.2 | 456 +++++++++++++++++++++
4 files changed, 461 insertions(+), 5 deletions(-)
diff --git a/sys-devel/binutils-config/binutils-config-5-r4.ebuild b/sys-devel/binutils-config/binutils-config-5-r4.ebuild
index c6b253148a5..a821d197847 100644
--- a/sys-devel/binutils-config/binutils-config-5-r4.ebuild
+++ b/sys-devel/binutils-config/binutils-config-5-r4.ebuild
@@ -6,7 +6,7 @@ EAPI="5"
inherit prefix
DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
+HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Toolchain"
SRC_URI=""
LICENSE="GPL-2"
diff --git a/sys-devel/binutils-config/binutils-config-5.1-r1.ebuild b/sys-devel/binutils-config/binutils-config-5.1-r1.ebuild
index 04b99251ed8..02bdd68ef89 100644
--- a/sys-devel/binutils-config/binutils-config-5.1-r1.ebuild
+++ b/sys-devel/binutils-config/binutils-config-5.1-r1.ebuild
@@ -6,7 +6,7 @@ EAPI=6
inherit prefix
DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
+HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Toolchain"
SRC_URI=""
LICENSE="GPL-2"
diff --git a/sys-devel/binutils-config/binutils-config-5-r4.ebuild b/sys-devel/binutils-config/binutils-config-5.2.ebuild
similarity index 84%
copy from sys-devel/binutils-config/binutils-config-5-r4.ebuild
copy to sys-devel/binutils-config/binutils-config-5.2.ebuild
index c6b253148a5..152af30c911 100644
--- a/sys-devel/binutils-config/binutils-config-5-r4.ebuild
+++ b/sys-devel/binutils-config/binutils-config-5.2.ebuild
@@ -1,17 +1,17 @@
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI="5"
+EAPI=7
inherit prefix
DESCRIPTION="Utility to change the binutils version being used"
-HOMEPAGE="https://www.gentoo.org/"
+HOMEPAGE="https://wiki.gentoo.org/wiki/Project:Toolchain"
SRC_URI=""
LICENSE="GPL-2"
SLOT="0"
-KEYWORDS="alpha amd64 arm arm64 hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86"
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sh ~sparc ~x86"
IUSE=""
# We also RDEPEND on sys-apps/findutils which is in base @system
diff --git a/sys-devel/binutils-config/files/binutils-config-5.2 b/sys-devel/binutils-config/files/binutils-config-5.2
new file mode 100644
index 00000000000..69ca530a704
--- /dev/null
+++ b/sys-devel/binutils-config/files/binutils-config-5.2
@@ -0,0 +1,456 @@
+#!/bin/bash
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# Format of /etc/env.d/binutils/:
+# config-TARGET: CURRENT=version for TARGET
+# TARGET-VER: has a TARGET and VER variable
+
+EPREFIX="@GENTOO_PORTAGE_EPREFIX@"
+if [[ ${EPREFIX} == "@"GENTOO_PORTAGE_EPREFIX"@" ]] ; then
+ EPREFIX=""
+fi
+
+: ${ROOT:=/}
+[[ ${ROOT} != */ ]] && ROOT="${ROOT}/"
+[[ ${ROOT} != /* ]] && ROOT="${PWD%/}/${ROOT}"
+
+EROOT="${ROOT%/}${EPREFIX}/"
+
+cd "${EPREFIX}/"
+
+trap ":" INT QUIT TSTP
+
+argv0=${0##*/}
+FUNCTIONS_SH="${EPREFIX}/lib/gentoo/functions.sh"
+source ${FUNCTIONS_SH} || {
+ echo "${argv0}: Could not source ${FUNCTIONS_SH}!" 1>&2
+ exit 1
+}
+esyslog() { :; }
+die() { eerror "${argv0}: $*"; exit 1; }
+umask 022
+
+usage() {
+cat << USAGE_END
+Usage: ${HILITE}binutils-config${NORMAL} ${GOOD}[options]${NORMAL} ${BRACKET}[binutils profile]${NORMAL}
+
+${HILITE}General Options:${NORMAL}
+ ${GOOD}-c, --get-current-profile${NORMAL} Print current profile
+ ${GOOD}-l, --list-profiles${NORMAL} Print a list of available profiles
+ ${GOOD}-u, --uninstall${NORMAL} Remove all signs of specified target
+ ${GOOD}-d, --debug${NORMAL} Execute with debug output
+
+Profile names are of the form: ${BRACKET}<CTARGET>-<binutils version>${NORMAL}
+For example: ${BRACKET}i686-pc-linux-gnu-2.15.92.0.2${NORMAL}
+
+For more info, please see ${HILITE}binutils-config${NORMAL}(8).
+USAGE_END
+
+ exit ${1:-1}
+}
+
+mv_if_diff() {
+ if cmp -s "$1" "$2" ; then
+ rm -f "$1"
+ else
+ mv -f "$1" "$2"
+ fi
+}
+atomic_ln() {
+ local target=$1 linkdir=$2 linkname=$3 linktmp linkfull
+ linktmp="${linkdir}/.binutils-config.tmp.${linkname}"
+ linkfull="${linkdir}/${linkname}"
+ if [[ -d ${linkfull} ]] ; then
+ # if linking to a dir, we need a little magic to
+ # make it atomic since `mv -T` is not portable
+ rm -rf "${linktmp}"
+ mkdir -p "${linktmp}"
+ ln -sf "${target}" "${linktmp}/${linkname}"
+ mv "${linktmp}/${linkname}" "${linktmp}/../"
+ rmdir "${linktmp}"
+ else
+ # `ln` will expand into unlink();symlink(); which
+ # is not atomic for a small amount of time, but
+ # `mv` is a single rename() call
+ ln -sf "${target}" "${linktmp}"
+ mv "${linktmp}" "${linkfull}"
+ fi
+}
+
+setup_env() {
+ unset TARGET VER LIBPATH
+ source "${ENV_D}/${PROFILE}"
+ if [[ -z ${TARGET} ]] ; then
+ eerror "${PROFILE} is invalid (no \$TARGET defined) :("
+ return 1
+ fi
+ if [[ -z ${VER} ]] ; then
+ eerror "${PROFILE} is invalid (no \$VER defined) :("
+ return 1
+ fi
+
+ #
+ # Generate binary symlinks
+ #
+ BINPATH=""
+ BINPATH_LINKS=""
+ if [[ ${TARGET} != ${HOST} ]] ; then
+ #
+ # Newer paths: /usr/${HOST}/${TARGET}/...
+ # Older paths: /usr/${TARGET}/...
+ #
+ if [[ -d "${EROOT}"/usr/${HOST}/${TARGET}/binutils-bin/${VER} ]] ; then
+ BINPATH="${EPREFIX}"/usr/${HOST}/${TARGET}/binutils-bin/${VER}
+ BINPATH_LINKS="${EPREFIX}"/usr/libexec/gcc/${TARGET}
+ fi
+ fi
+ if [[ -z ${BINPATH} ]] ; then
+ BINPATH="${EPREFIX}"/usr/${TARGET}/binutils-bin/${VER}
+ BINPATH_LINKS="${EPREFIX}"/usr/${TARGET}/bin
+ fi
+}
+
+# Lists of headers that various versions have installed.
+HEADERS=(
+ ansidecl.h bfd.h bfdlink.h demangle.h dis-asm.h dyn-string.h
+ fibheap.h hashtab.h libiberty.h objalloc.h plugin-api.h
+ splay-tree.h symcat.h
+)
+
+switch_profile() {
+ local x
+
+ ebegin "Switching to ${PROFILE}"
+
+ setup_env || return 1
+
+ cd "${ROOT}/${BINPATH}" || exit 1
+ mkdir -p "${ROOT}/${BINPATH_LINKS}" "${EROOT}/usr/bin"
+ for x in * ; do
+ atomic_ln "${BINPATH}/${x}" "${ROOT}/${BINPATH_LINKS}" "${x}"
+ atomic_ln "${BINPATH_LINKS}/${x}" "${EROOT}/usr/bin" "${TARGET}-${x}"
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ atomic_ln "${TARGET}-${x}" "${EROOT}/usr/bin" "${x}"
+ fi
+ done
+
+ #
+ # Generate library / ldscripts symlinks
+ #
+ : ${LIBPATH:=${EPREFIX}/usr/lib/binutils/${TARGET}/${VER}}
+ cd "${ROOT}/${LIBPATH}" || exit 1
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ dstlib=${EROOT}/usr/${HOST}/lib
+ else
+ dstlib=${EROOT}/usr/${HOST}/${TARGET}/lib
+ fi
+ # When upgrading, we need to clean up ldscripts and libs.
+ # Don't symlink back in the libs -- the binutils-lib package handles
+ # these now.
+ # TODO: Stop requiring even the ldscripts symlink.
+ mkdir -p "${dstlib}"
+ rm -rf "${ROOT}/${BINPATH_LINKS}"/ldscripts
+ atomic_ln "${LIBPATH}/ldscripts" "${dstlib}" "ldscripts"
+ find -L "${dstlib}" -xtype l -name 'lib*' -delete
+ # Detect older binutils w/broken rpaths. #562460
+ # We can hardcode the "/lib" part since that's what the binutils
+ # configure scripts have. They did not include any other path.
+ if [[ $(scanelf -qF '%r#F' "${ROOT}/${BINPATH}/as") == */lib ]] ; then
+ ewarn "Old cross-binutils detected; please re-emerge to fix (see bug #562460)."
+ for x in lib* ; do
+ atomic_ln "${LIBPATH}/${x}" "${dstlib}" "${x}"
+ done
+ fi
+
+ #
+ # Clean out old generated include symlinks
+ #
+ INCPATH=${LIBPATH}/include
+ if [[ -d ${ROOT}/${INCPATH} ]] ; then
+ cd "${ROOT}/${INCPATH}" || exit 1
+ if [[ ${HOST} != ${TARGET} ]] ; then
+ # Clean out old path -- cannot use '-exec {} +' syntax here
+ find . -type f -exec rm -f "${EROOT}/usr/${TARGET}/usr/include/{}" \;
+ rmdir "${EROOT}/usr/${TARGET}/usr/include" >& /dev/null
+ rmdir "${EROOT}/usr/${TARGET}/usr" >& /dev/null
+ rmdir "${EROOT}/usr/${TARGET}" >& /dev/null
+ fi
+ fi
+
+ #
+ # Make sure proper paths get updated
+ #
+ local env_update_flag="--no-ldconfig"
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ # Delete old config now that binutils-libs installs these files.
+ # Note: This skips ldconfig update if env.d had LDPATH, but meh.
+ # Most people have upgraded to ld.so.conf.d, and someone else will
+ # eventually re-run ldconfig for us.
+ x="${EROOT}"/etc/ld.so.conf.d/05binutils.conf
+ if [[ -e ${x} ]]; then
+ rm -f "${x}"
+ env_update_flag=""
+ fi
+
+ DATAPATH="${EPREFIX}"/usr/share/binutils-data/${TARGET}/${VER}
+ local e="${EROOT}"/etc/env.d/05binutils
+ local ee="${e}.tmp"
+ rm -f "${ee}"
+ [[ -d ${ROOT}/${DATAPATH}/man ]] && echo "MANPATH=${DATAPATH}/man" >> "${ee}"
+ [[ -d ${ROOT}/${DATAPATH}/info ]] && echo "INFOPATH=${DATAPATH}/info" >> "${ee}"
+ mv_if_diff "${ee}" "${e}"
+ fi
+
+ local c="${ENV_D}/config-${TARGET}"
+ local cc="${c}.tmp"
+ echo "CURRENT=${VER}" > "${cc}"
+ mv_if_diff "${cc}" "${c}"
+
+ eend 0
+
+ #
+ # Regen env.d if need/can be
+ #
+ if [[ ${ROOT} == "/" ]] && [[ ${TARGET} == ${HOST} ]] ; then
+ env-update ${env_update_flag}
+ echo
+ ewarn "Please remember to run:"
+ echo
+ ewarn " # . ${EPREFIX}/etc/profile"
+ echo
+ fi
+
+ return 0
+}
+
+uninstall_target() {
+ : ${TARGET:=${UARG}}
+
+ if [[ ${TARGET} == ${HOST} ]] ; then
+ die "refusing to uninstall native binutils"
+ fi
+
+ shopt -s nullglob
+ PROFILE=""
+
+ for PROFILE in "${ENV_D}"/${TARGET}-* ; do
+ ewarn "Removing all signs of ${PROFILE##*/}"
+ rm -f "${ENV_D}"/${PROFILE}
+ done
+ if [[ -z ${PROFILE} ]] && [[ ! -e ${ENV_D}/config-${TARGET} ]] ; then
+ die "no profiles exist for '${TARGET}'"
+ fi
+
+ rm -f "${ENV_D}"/config-${TARGET}
+
+ local x
+ for x in \
+ addr2line ar as c++filt dwp elf2flt elfedit flthdr gprof \
+ ld ld.{bfd,gold,real} \
+ nm objcopy objdump ranlib readelf size strings strip
+ do
+ x=(
+ "${EROOT}"/usr/bin/${TARGET}-${x}
+ "${EROOT}"/usr/{${HOST}/,}${TARGET}/bin/${x}
+ "${EROOT}"/usr/libexec/gcc/${TARGET}/${x}
+ )
+ rm -f "${x[@]}"
+ done
+ for x in "${HEADERS[@]}" ; do
+ rm -f "${EROOT}"/usr/{${HOST}/,}${TARGET}/{usr/,}include/${x}
+ done
+ for x in bfd iberty opcodes ; do
+ rm -f "${EROOT}"/usr/${HOST}/${TARGET}/lib/lib${x}{{-*,}.so,.a,.la}
+ done
+ # Delete broken symlinks
+ local destdir="${EROOT}/usr/${HOST}/${TARGET}"
+ rm -f "${destdir}"/lib/ldscripts
+ find -L "${destdir}"/lib -type l -exec rm {} +
+ rmdir \
+ "${destdir}"/{bin,include,lib,usr} \
+ "${destdir}" \
+ "${EROOT}"/var/db/pkg/cross-${TARGET} \
+ "${EROOT}"/usr/{${HOST}/,}${TARGET}/bin \
+ "${EROOT}"/usr/libexec/gcc/${TARGET} \
+ 2>/dev/null
+
+ rm -f "${ENV_D}"/${TARGET}-*
+}
+
+set_current_profile() {
+ if [[ ! -f ${ENV_D}/config-${TARGET} ]] ; then
+ eerror "${argv0}: unable to locate a profile for target: ${TARGET}"
+ return 1
+ fi
+
+ source "${ENV_D}/config-${TARGET}"
+
+ if [[ -z ${CURRENT} ]] ; then
+ eerror "${argv0}: no binutils profile is active!"
+ return 1
+ fi
+
+ echo "${TARGET}-${CURRENT}"
+
+ return 0
+}
+get_current_profile() { echo "${PROFILE}" ; }
+
+list_profiles() {
+ local x i target
+
+ if [[ ${ROOT} != / ]] ; then
+ echo "Using binutils-config info in ${ROOT}"
+ fi
+
+ set -- "${ENV_D}"/*
+ target=
+ i=1
+
+ for x ; do
+ # skip broken links and config files
+ [[ -f ${x} ]] || continue
+ [[ ${x} == */config-* ]] && continue
+
+ source "${x}"
+ if [[ ${target} != ${TARGET} ]] ; then
+ [[ -n ${target} ]] && echo
+ target=${TARGET}
+ fi
+
+ x=${x##*/}
+ if [[ -e ${ENV_D}/config-${TARGET} ]] ; then
+ source "${ENV_D}/config-${TARGET}"
+ if [[ ${VER} == ${CURRENT} ]] ; then
+ [[ ${TARGET} == ${HOST} ]] \
+ && x="${x} ${GOOD}*${NORMAL}" \
+ || x="${x} ${HILITE}*${NORMAL}"
+ fi
+ fi
+
+ # We would align the [...] field like so:
+ #printf ' [%*ss] %s\n' ${##} "${i}" "${x}"
+ # but this breaks simple scripting: `binutils -l | awk '{print $2}'`
+
+ # Or we could align the target col like so:
+ #printf ' [%s]%*s %s\n' "${i}" $(( ${##} - ${#i} )) "" "${x}"
+ # but i'm not sold that it looks better
+
+ # So keep it simple ... only makes a diff anyways for crazy people
+ # like me which have 100+ binutils packages installed ...
+ echo " [$i] ${x}"
+ ((++i))
+ done
+}
+
+set_HOST() {
+ # Set HOST to CHOST if it isn't already set
+ : ${HOST:=${CHOST:-$(portageq envvar CHOST)}}
+}
+
+ENV_D="${EROOT}etc/env.d/binutils"
+
+DEBUG="no"
+NEED_ACTION="yes"
+DOIT="switch_profile"
+PROFILE="current"
+HOST=""
+TARGET=""
+unset UARG
+
+select_action() {
+ if [[ ${NEED_ACTION} != "no" ]] ; then
+ NEED_ACTION="no"
+ DOIT=$1
+ else
+ die "one action at a time!"
+ fi
+}
+
+while [[ $# -gt 0 ]] ; do
+ x=$1
+ shift
+ case ${x} in
+ -c|--get-current-profile) select_action get_current_profile ;;
+ -l|--list|--list-profiles) select_action list_profiles ;;
+ -u|--uninstall) select_action uninstall_target ;;
+ -d|--debug) DEBUG="yes" ;;
+ -h|--help) usage 0 ;;
+ -V|--version)
+ ver="@PV@"
+ echo "binutils-config-${ver/@'PV'@/git}"
+ exit 0
+ ;;
+ -*)
+ die "invalid switch! Try '--help'."
+ ;;
+ *)
+ if [[ ${UARG+set} == "set" ]] ; then
+ die "only one profile/target at a time please"
+ fi
+ NEED_ACTION="maybe"
+ UARG=${x}
+ ;;
+ esac
+done
+
+[[ ${NEED_ACTION} == "yes" ]] && usage 1
+[[ ${DEBUG} == "yes" ]] && set -x
+
+# All operations need to know the current HOST to figure out
+# what is a native target and what is a cross target
+set_HOST
+
+# All operations need to know the profile the user wants
+case ${DOIT} in
+switch_profile)
+ # decode user's profile choice
+ x=${UARG:-$(TARGET=${HOST} set_current_profile)}
+ PROFILE=""
+ if [[ -z $(echo ${x} | tr -d '[:digit:]') ]] ; then
+ # User gave us a # representing the profile
+ i=1
+ for y in "${ENV_D}"/* ; do
+ [[ ${y/config-} != ${y} ]] && continue
+
+ if [[ -f ${y} ]] && [[ ${x} -eq ${i} ]] ; then
+ PROFILE=${y##*/}
+ break
+ fi
+ ((++i))
+ done
+ fi
+
+ if [[ -z ${PROFILE} ]] ; then
+ # User gave us a full HOST-ver
+ x=${x##*/}
+ if [[ -f ${ENV_D}/${x} ]] ; then
+ # Valid HOST-ver yeah!
+ PROFILE=${x}
+ else
+ # Not a valid HOST-ver ...
+ if [[ ! -f ${ENV_D}/config-${x} ]] ; then
+ # Maybe they just gave us a ver ...
+ if [[ -f ${ENV_D}/${HOST}-${x} ]] ; then
+ x=${HOST}-${x}
+ else
+ die "could not locate '$x' in '${ENV_D}/'!"
+ fi
+ PROFILE=${x}
+ else
+ # Maybe they just gave us a target ... pick active profile
+ PROFILE=$(TARGET=${x} set_current_profile)
+ fi
+ fi
+ fi
+ ;;
+*)
+ # lookup current profile as the user gave us a target
+ PROFILE=$(TARGET=${UARG:-${HOST}} set_current_profile) || exit 1
+ ;;
+esac
+
+eval ${DOIT}
+
+# vim:ts=4
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-12-29 20:14 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-23 10:23 [gentoo-commits] repo/gentoo:master commit in: sys-devel/binutils-config/files/, sys-devel/binutils-config/ Mike Frysinger
-- strict thread matches above, loose matches on Subject: below --
2019-12-29 20:14 Sergei Trofimovich
2017-12-30 22:52 Mike Gilbert
2017-12-18 20:06 Andreas Hüttel
2017-03-12 21:44 Mike Frysinger
2017-03-12 21:44 Mike Frysinger
2015-09-26 18:15 Mike Frysinger
2015-09-26 17:46 Mike Frysinger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox