summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2004-10-25 13:57:29 +0000
committerMike Frysinger <vapier@gentoo.org>2004-10-25 13:57:29 +0000
commitea08fd7f40276b67305929bc50bd4911122aabb3 (patch)
treed075fe56d9d1abdf634e78f350b965aa2a924755 /sys-devel
parentVersion bump; updated HOMEPAGE and SRC_URI; respect user CFLAGS; use make ins... (diff)
downloadhistorical-ea08fd7f40276b67305929bc50bd4911122aabb3.tar.gz
historical-ea08fd7f40276b67305929bc50bd4911122aabb3.tar.bz2
historical-ea08fd7f40276b67305929bc50bd4911122aabb3.zip
remove old files
Diffstat (limited to 'sys-devel')
-rw-r--r--sys-devel/gcc-config/Manifest11
-rw-r--r--sys-devel/gcc-config/files/gcc-config-1.4550
-rw-r--r--sys-devel/gcc-config/files/gcc-config-1.4.1600
-rw-r--r--sys-devel/gcc-config/files/wrapper-1.4.1.c311
-rw-r--r--sys-devel/gcc-config/files/wrapper-1.4.c228
-rw-r--r--sys-devel/gcc-config/files/wrapper.c141
6 files changed, 3 insertions, 1838 deletions
diff --git a/sys-devel/gcc-config/Manifest b/sys-devel/gcc-config/Manifest
index 77df945240e1..0372c1a60ccc 100644
--- a/sys-devel/gcc-config/Manifest
+++ b/sys-devel/gcc-config/Manifest
@@ -8,17 +8,12 @@ MD5 9a09f8d531c582e78977dbfd96edc1f2 metadata.xml 164
MD5 04ffd7a97a3ba3f11745080e82266e16 files/gcc-config-1.3.7 10724
MD5 d41d8cd98f00b204e9800998ecf8427e files/digest-gcc-config-1.3.6-r3 0
MD5 d41d8cd98f00b204e9800998ecf8427e files/digest-gcc-config-1.3.7 0
-MD5 6fb6357ea1e81976c54079bbac2b5953 files/gcc-config-1.4 12017
-MD5 b2f6742e0556986c6c1f1de8e737fd6c files/gcc-config-1.4.1 12978
-MD5 44763c26bd5bb1303d5be8b5f4309c29 files/wrapper-1.4.1.c 7299
-MD5 843435f640a4b76d12f8faee16f685f3 files/wrapper-1.4.c 5636
-MD5 d9c2c81252d15436663ce61abcb87e19 files/wrapper.c 3520
MD5 e64a89abafa7f6f7d16c2540fb0edcf4 files/wrapper-1.4.2.c 7381
MD5 f9ac19eaceaad00963038bc3d3d11b98 files/gcc-config-1.3.6 10163
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.9.10 (GNU/Linux)
-iD8DBQFBbYYYHTu7gpaalycRAiqOAJ9xP8wwXds/VLXKKDGe+VXHMy43AgCg69bl
-GtwVZ3Rkjsx1sIx348ZrM44=
-=XIdo
+iD8DBQFBfQaVHTu7gpaalycRAkmFAKDsWkTx0frN+7ndNdq8k33JfF31nQCg/Io8
+Z1pB6yGz18fb++T00t74QPg=
+=ewbL
-----END PGP SIGNATURE-----
diff --git a/sys-devel/gcc-config/files/gcc-config-1.4 b/sys-devel/gcc-config/files/gcc-config-1.4
deleted file mode 100644
index e1f9011f47fb..000000000000
--- a/sys-devel/gcc-config/files/gcc-config-1.4
+++ /dev/null
@@ -1,550 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2004 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.4,v 1.4 2004/10/02 12:21:18 lv Exp $
-# Author: Martin Schlemmer <azarah@gentoo.org>
-
-source /etc/init.d/functions.sh || {
- echo "$0: Could not source /etc/init.d/functions.sh!"
- exit 1
-}
-
-die() {
- echo "$*"
- exit 1
-}
-
-usage() {
-cat << "USAGE_END"
-Usage: gcc-config [Option] [CC Profile]
-Change the current cc/gcc profile, or give info about profiles.
-
-Options:
-
- --use-old Use the old profile if one was selected.
-
- --use-portage-chost Only set to given profile if its CHOST is the same
- as that set for portage in /etc/make.conf (or one of
- other portage config files...).
-
- --get-current-profile Print current used gcc profile.
-
- --list-profiles Print a list of available profiles.
-
- --print-environ Print environment that can be used to setup things
- for current gcc profile, or specified one ...
-
- --get-bin-path Print path where binaries of given/current profile
- are located.
-
- --get-lib-path Print path where libraries of given/current profile
- are located.
-
- --get-stdcxx-incdir Print path to g++ include files of given/current
- profile.
-
- --install-toolchain Install a new cross-compiling toolchain (that does
- not appear in the list of available profiles)
- and create the specified profile.
-
-The profile name is in the form of:
-
- <CHOST>-<gcc version>
-
-For example:
-
- i686-pc-linux-gnu-3.2.1
-
-
-
-USAGE_END
-
- exit 1
-}
-
-if [ "$#" -lt 1 ]
-then
- usage
-fi
-
-HAVE_WHICH="no"
-if [ -n "$(which which 2> /dev/null)" ]
-then
- HAVE_WHICH="yes"
-fi
-
-find_path() {
- [ -z "$1" ] && return 0
-
- if [ "${HAVE_WHICH}" = "yes" ]
- then
- local fullpath="$(which $1 2> /dev/null)"
-
- if [ -x "${fullpath}" ]
- then
- echo "${fullpath}"
- return 0
- fi
- fi
-
- for x in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin
- do
- if [ -x "${x}/$1" -a -r "${x}/$1" ]
- then
- echo "${x}/$1"
- return 0
- fi
- done
-
- return 0
-}
-
-cmd_setup() {
-
- # Sourcing /etc/env.d/gcc/${CC_COMP} is going to mess up
- # PATH among things...
- CP="$(find_path cp)"
- RM="$(find_path rm)"
- MV="$(find_path mv)"
- LN="$(find_path ln)"
- CAT="$(find_path cat)"
- AWK="$(find_path gawk)"
- GREP="$(find_path grep)"
- FIND="$(find_path find)"
- CHMOD="$(find_path chmod)"
- TOUCH="$(find_path touch)"
- ENV_UPDATE="$(find_path env-update)"
-}
-
-CC_COMP=""
-REAL_CHOST="$(/usr/bin/python -c 'import portage; print portage.settings["CHOST"];' 2> /dev/null)"
-if [ -z "${REAL_CHOST}" ]
-then
- eerror "$0: Could not get portage CHOST!"
- return 1
-fi
-
-switch_profile() {
- local MY_LDPATH=""
- local GCC_PROFILES=""
- local OLD_CC_COMP=""
-
- if [ -r /etc/env.d/gcc/config ]
- then
- source /etc/env.d/gcc/config
-
- if [ -n "${CURRENT}" ]
- then
- OLD_CC_COMP="${CURRENT}"
- fi
- fi
-
- if [ "$(id -u)" -ne 0 ]
- then
- eerror "$0: Must be root."
- exit 1
- fi
-
- ebegin "Switching to ${CC_COMP} compiler"
-
- # Sourcing /etc/env.d/gcc/${CC_COMP} is going to mess up
- # PATH among things...
- cmd_setup
-
- # Order our profiles to have the default first...
- # We do this so that we can have them ordered with default
- # first in /etc/ld.so.conf, as the logical is that all
- # compilers for default CHOST will be used to compile stuff,
- # and thus we want all their lib paths in /etc/ld.so.conf ...
- GCC_PROFILES="$(${FIND} /etc/env.d/gcc/ -name "${REAL_CHOST}-*")"
- GCC_PROFILES="${GCC_PROFILES/\/etc\/env.d\/gcc\/${CC_COMP}}"
- GCC_PROFILES="/etc/env.d/gcc/${CC_COMP} ${GCC_PROFILES}"
-
- # Extract all LDPATH's for our CHOST
- for x in ${GCC_PROFILES}
- do
- if [ -f "${x}" ]
- then
- source "${x}"
-
- if [ -z "${MY_LDPATH}" ]
- then
- if [ -d "${LDPATH}" ]
- then
- MY_LDPATH="${LDPATH}"
- fi
- else
- if [ -d "${LDPATH}" ]
- then
- MY_LDPATH="${MY_LDPATH}:${LDPATH}"
- fi
- fi
- fi
- done
-
- # Setup things properly again for this profile
- source "/etc/env.d/gcc/${CC_COMP}"
-
- # Setup /etc/env.d/05gcc
- ${AWK} '!/^STDCXX_INCDIR=|^LDPATH=/ {print $0}' \
- "/etc/env.d/gcc/${CC_COMP}" > /etc/env.d/05gcc
-
- # Add our custom LDPATH
- echo "LDPATH=\"${MY_LDPATH}\"" >> /etc/env.d/05gcc
-
- # Make sure we do not recreate /lib/cpp and /usr/bin/cc ...
-# echo "DISABLE_GEN_GCC_WRAPPERS=\"yes\"" >> /etc/env.d/05gcc
-
- echo "CURRENT=${CC_COMP}" > /etc/env.d/gcc/config
-
- source /etc/profile
-
- # These might not be installed, and we want to update the mtime
- # for ccache and distcc anyhow ...
- ${RM} -f /lib/cpp
- ${CP} -f /usr/lib/gcc-config/wrapper /lib/cpp
- for x in gcc cpp cc c++ g++ "${CHOST}-gcc" "${CHOST}-c++" "${CHOST}-g++"
- do
- ${RM} -f "/usr/bin/${x}"
- ${CP} -f /usr/lib/gcc-config/wrapper "/usr/bin/${x}"
-
- if [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
- then
- ${TOUCH} -m "/usr/bin/${x}"
- fi
- done
-
-
- ${ENV_UPDATE} &> /dev/null
-
- eend 0
-
- if [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
- then
- echo
- ewarn "If you intend to use the gcc from the new profile in an already"
- ewarn "running shell, please remember to do:"
- echo
- ewarn " # source /etc/profile"
- echo
- fi
-
- return 0
-}
-
-get_current_profile() {
- if [ ! -f /etc/env.d/gcc/config ]
- then
- eerror "$0: No gcc profile is active!"
- return 1
- fi
-
- source /etc/env.d/gcc/config
-
- if [ -z "${CURRENT}" ]
- then
- eerror "$0: No gcc profile is active!"
- return 1
- fi
-
- echo "${CURRENT}"
-
- return 0
-}
-
-list_profiles() {
- if [ ! -f /etc/env.d/gcc/config ]
- then
- eerror "$0: No gcc profile is active!"
- return 1
- fi
-
- for x in /etc/env.d/gcc/*
- do
- if [ -f "${x}" -a "${x}" != "/etc/env.d/gcc/config" ]
- then
- echo "${x##*/}"
- fi
- done
-}
-
-print_environ() {
- local OLDPATH="${PATH}"
-
- source "/etc/env.d/gcc/${CC_COMP}"
-
- echo "export PATH=\"${PATH}:${OLDPATH}\""
-
-# if [ -z "${LD_LIBRARY_PATH}" ]
-# then
-# echo "export LD_LIBRARY_PATH=\"${LDPATH}\""
-# else
-# echo "export LD_LIBRARY_PATH=\"${LDPATH}:${LD_LIBRARY_PATH}\""
-# fi
-
- echo "export CC=\"${CC}\""
- echo "export CXX=\"${CXX}\""
-}
-
-get_bin_path() {
- source "/etc/env.d/gcc/${CC_COMP}"
-
- echo "${PATH}"
-
- return 0
-}
-
-get_lib_path() {
- source "/etc/env.d/gcc/${CC_COMP}"
-
- echo "${LDPATH}"
-
- return 0
-}
-
-get_stdcxx_incdir() {
- source "/etc/env.d/gcc/${CC_COMP}"
-
- eerror "${LDPATH}/include/${STDCXX_INCDIR}"
-
- return 0
-}
-
-# ===============================================================
-# cross-compiler install portions
-
-install_toolchain() {
- local ADIR PADIR x
- local ACCHOST="${CC_COMP%-*}"
- local AGCCVERS="${CC_COMP##*-}"
- local AROOT="/usr/${ACCHOST}/"
- local EMERGE="/usr/bin/emerge"
- local PORTDIR="$(portage_setting PORTDIR)"
-
- [ -z "${ACCHOST}" -o -z "${AGCCVERS}" ] && \
- die "Invalid profile specification"
-
- [ -f "/etc/env.d/gcc/${CC_COMP}" ] && \
- die "Toolchain is already installed, use --force"
-
- [ "${ACCHOST}" = "${REAL_CHOST}" ] && \
- echo "gcc-config should not be used to build a native toolchain"
-
- ebegin "Installing cross-compiling toolchain for ${ACCHOST}-${AGCCVERS}"
-
- [ -n "${ROOT}" ] && AROOT="${ROOT}${AROOT}"
-
- einfo "Creating ${AROOT}..."
- mkdir -p "${AROOT}" || die "Unable to create ${AROOT}"
-
- # this might work....
-# case ${ACCHOST} in
-# i[3456]86-*) ADIR="arch-x86" ;;
-# alpha-*) ADIR="arch-alpha" ;;
-# arm-*) ADIR="arch-arm" ;;
-# hppa-*) ADIR="arch-hppa" ;;
-# mips-*) ADIR="arch-mips" ;;
-# powerpc-*) ADIR="arch-powerpc" ;;
-# sparc-*) ADIR="arch-sparc" ;;
-# *) echo "bad CHOST spec"; exit 0 ;;
-# esac
-
- # but this gives better substring matching
- if [ $(expr "${ACCHOST}" : 'i[3456]86') -eq 4 ]; then
- # x86
- ADIR="arch-x86"
- elif [ $(expr "${ACCHOST}" : alpha) -eq 5 ]; then
- # Alpha
- ADIR="arch-alpha"
- elif [ $(expr "${ACCHOST}" : arm) -eq 3 ]; then
- # ARM
- ADIR="arch-arm"
- elif [ $(expr "${ACCHOST}" : hppa) -eq 4 ]; then
- # HP PA-Risc
- ADIR="arch-hppa"
- elif [ $(expr "${ACCHOST}" : mips) -eq 4 ]; then
- # MIPS
- ADIR="arch-mips"
- elif [ $(expr "${ACCHOST}" : powerpc) -eq 7 ]; then
- # PowerPC
- ADIR="arch-ppc"
- elif [ $(expr "${ACCHOST}" : sparc) -eq 5 ]; then
- # sparc
- ADIR="arch-sparc"
- else
- echo "unknown CHOST=${ACCHOST} - time to hack on gcc-config"
- exit 1
- fi
-
- # create the portage arch directory, if it doesn't exist
- PADIR="${PORTDIR}/${ADIR}"
- if [ ! -d "${PADIR}" ]; then
- einfo "Creating ${PADIR} directory..."
- mkdir "${PADIR}" || die "Can't create ${PADIR}"
- einfo "Creating ${PADIR} symlinks..."
- ( cd "${PADIR}" &&
- for x in sys-devel/binutils sys-devel/gcc sys-libs/glibc \
- sys-kernel/linux-headers; do
- ln -s ../$x
- done ) || die "Unable to create symlinks in ${PADIR}"
- fi
-
- einfo "Starting on cross-binutils for ${ACCHOST}..."
- ACCEPT_KEYWORDS="~x86" \
- CCHOST=${ACCHOST} \
- ${EMERGE} ${ADIR}/binutils -p || \
- die "Unable to merge cross binutils"
-
- einfo "Cross-compiling Linux headers for ${ACCHOST} in ${AROOT}..."
- ACCEPT_KEYWORDS="~x86" \
- ROOT=${AROOT} \
- CHOST=${ACCHOST} \
- CCHOST=${ACCHOST} \
- ${EMERGE} ${ADIR}/linux-headers -p || \
- die "Unable to merge cross headers"
-
- einfo "Starting on initial cross-gcc for ${ACCHOST}..."
- ACCEPT_KEYWORDS="~x86" \
- CCHOST=${ACCHOST} \
- USE=build \
- ${EMERGE} ">=${ADIR}/gcc-${AGCCVERS}*" -p || \
- die "Unable to merge initial cross gcc"
-
- einfo "Cross-compiling glibc for ${ACCHOST} in ${AROOT}..."
- ACCEPT_KEYWORDS="~x86" \
- ROOT=${AROOT} \
- CHOST=${ACCHOST} \
- CCHOST=${ACCHOST} \
- USE="build" \
- ${EMERGE} ${ADIR}/glibc --nodeps -p || \
- die "Unable to merge cross glibc"
-
- einfo "Starting on full cross-gcc for ${ACCHOST}..."
- ACCEPT_KEYWORDS="~x86" \
- CCHOST=${ACCHOST} \
- ${EMERGE} ">=${ADIR}/gcc-${AGCCVERS}*" -p || \
- die "Unable to merge full cross gcc"
-
- eend 0
-
-}
-
-# ===============================================================
-# Main program begins here
-
-NEED_ACTION="yes"
-DOIT="switch_profile"
-CHECK_CHOST="no"
-
-for x in $*
-do
- case "${x}" in
- # Only use specified compiler if one is not already selected.
- --use-old)
- if get_current_profile &> /dev/null
- then
- CC_COMP="$(get_current_profile)"
- fi
- ;;
- --use-portage-chost)
- CHECK_CHOST="yes"
- ;;
- --get-current-profile)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_current_profile"
- fi
- ;;
- --list-profiles)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="list_profiles"
- fi
- ;;
- --print-environ)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="print_environ"
- fi
- ;;
- --get-bin-path)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_bin_path"
- fi
- ;;
- --get-lib-path)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_lib_path"
- fi
- ;;
- --get-stdcxx-incdir)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_stdcxx_incdir"
- fi
- ;;
- --install-toolchain)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="install_toolchain"
- fi
- ;;
- --*)
- eerror "$0: Invalid switch! Run $0 without parameters for help."
- exit 1
- ;;
- *)
- if [ -z "${CC_COMP}" ]
- then
- CC_COMP="${x}"
- fi
- ;;
- esac
-done
-
-if [ \( "${DOIT}" = "install_toolchain" -o \
- "${DOIT}" = "switch_profile" \) -a \
- -z "${CC_COMP}" ]
-then
- usage
-fi
-
-if [ -z "${CC_COMP}" ]
-then
- if get_current_profile &> /dev/null
- then
- CC_COMP="$(get_current_profile)"
- else
- eerror "$0: No default profile setup!"
- exit 1
- fi
-fi
-
-if [ "${DOIT}" != "install_toolchain" -a \
- \( ! -d "/usr/lib/gcc-lib/${CC_COMP%-*}/${CC_COMP##*-}" -o \
- ! -f "/etc/env.d/gcc/${CC_COMP}" \) ]
-then
- eerror "$0: Profile does not exist or invalid setting for /etc/env.d/gcc/${CC_COMP}"
- #exit 1
-fi
-
-# Chosen CHOST are not the same as the real CHOST according to make.conf,
-# and --use-portage-chost option was given, so do nothing ...
-if [ "${CHECK_CHOST}" = "yes" -a "${CC_COMP%-*}" != "${REAL_CHOST}" ]
-then
- exit 0
-fi
-
-eval ${DOIT}
-
-
-# vim:ts=4
diff --git a/sys-devel/gcc-config/files/gcc-config-1.4.1 b/sys-devel/gcc-config/files/gcc-config-1.4.1
deleted file mode 100644
index b695d0cacb64..000000000000
--- a/sys-devel/gcc-config/files/gcc-config-1.4.1
+++ /dev/null
@@ -1,600 +0,0 @@
-#!/bin/bash
-# Copyright 1999-2004 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.4.1,v 1.5 2004/10/02 12:21:18 lv Exp $
-# Author: Martin Schlemmer <azarah@gentoo.org>
-# Cross-compiling toolchain contributions by:
-# Zach Welch <zwelch@gentoo.org> and James Boddington <aiken@gentoo.org>
-
-# handle not ROOT installs
-[ -z "${ROOT}" ] && ROOT="/"
-
-source /etc/init.d/functions.sh || {
- echo "$0: Could not source /etc/init.d/functions.sh!"
- exit 1
-}
-
-die() {
- echo "$*"
- exit 1
-}
-
-usage() {
-cat << "USAGE_END"
-Usage: gcc-config [Option] [CC Profile]
-Change the current cc/gcc profile, or give info about profiles.
-
-Options:
-
- --use-old Use the old profile if one was selected.
-
- --use-portage-chost Only set to given profile if its CHOST is the same
- as that set for portage in /etc/make.conf (or one of
- other portage config files...).
-
- --get-current-profile Print current used gcc profile.
-
- --list-profiles Print a list of available profiles.
-
- --print-environ Print environment that can be used to setup things
- for current gcc profile, or specified one ...
-
- --get-bin-path Print path where binaries of given/current profile
- are located.
-
- --get-lib-path Print path where libraries of given/current profile
- are located.
-
- --get-stdcxx-incdir Print path to g++ include files of given/current
- profile.
-
- --install-toolchain Install a new cross-compiling toolchain (that does
- not appear in the list of available profiles)
- and create the specified profile.
- --remove-toolchain Remove a cross-compiling tollchain.
-
-The profile name is in the form of:
-
- <CHOST>-<gcc version>
-
-For example:
-
- i686-pc-linux-gnu-3.2.1
-
-
-USAGE_END
-
- exit 1
-}
-
-if [ "$#" -lt 1 ]
-then
- usage
-fi
-
-HAVE_WHICH="no"
-if [ -n "$(which which 2> /dev/null)" ]
-then
- HAVE_WHICH="yes"
-fi
-
-find_path() {
- [ -z "$1" ] && return 0
-
- if [ "${HAVE_WHICH}" = "yes" ]
- then
- local fullpath="$(which $1 2> /dev/null)"
-
- if [ -x "${fullpath}" ]
- then
- echo "${fullpath}"
- return 0
- fi
- fi
-
- for x in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin
- do
- if [ -x "${x}/$1" -a -r "${x}/$1" ]
- then
- echo "${x}/$1"
- return 0
- fi
- done
-
- return 0
-}
-
-cmd_setup() {
-
- # Sourcing /etc/env.d/gcc/${CC_COMP} is going to mess up
- # PATH among things...
- CP="$(find_path cp)"
- RM="$(find_path rm)"
- MV="$(find_path mv)"
- LN="$(find_path ln)"
- CAT="$(find_path cat)"
- AWK="$(find_path gawk)"
- GREP="$(find_path grep)"
- FIND="$(find_path find)"
- CHMOD="$(find_path chmod)"
- TOUCH="$(find_path touch)"
- ENV_UPDATE="$(find_path env-update)"
-}
-
-CC_COMP=""
-PORTDIR="$(portageq portdir)"
-PORTDIR_OVERLAY="$(portageq portdir_overlay)"
-
-get_real_chost() {
- [ -n "$REAL_CHOST" ] && return 0
-
- REAL_CHOST="$(portageq envvar CHOST)"
-
- if [ -z "${REAL_CHOST}" ]
- then
- eerror "$0: Could not get portage CHOST!"
- return 1
- fi
-}
-
-switch_profile() {
- local MY_LDPATH=""
- local GCC_PROFILES=""
- local OLD_CC_COMP=""
-
- if [ -r ${ROOT}etc/env.d/gcc/config ]
- then
- source ${ROOT}etc/env.d/gcc/config
-
- if [ -n "${CURRENT}" ]
- then
- OLD_CC_COMP="${CURRENT}"
- fi
- fi
-
- if [ "$(id -u)" -ne 0 ]
- then
- eerror "$0: Must be root."
- exit 1
- fi
-
- ebegin "Switching to ${CC_COMP} compiler"
-
- # Sourcing ${ROOT}etc/env.d/gcc/${CC_COMP} is going to mess up
- # PATH among things...
- cmd_setup
-
- # Order our profiles to have the default first...
- # We do this so that we can have them ordered with default
- # first in /etc/ld.so.conf, as the logical is that all
- # compilers for default CHOST will be used to compile stuff,
- # and thus we want all their lib paths in /etc/ld.so.conf ...
- get_real_chost
- GCC_PROFILES="$(${FIND} ${ROOT}etc/env.d/gcc/ -name "${REAL_CHOST}-*")"
- GCC_PROFILES="${GCC_PROFILES/\/etc\/env.d\/gcc\/${CC_COMP}}"
- GCC_PROFILES="/etc/env.d/gcc/${CC_COMP} ${GCC_PROFILES}"
-
- # Extract all LDPATH's for our CHOST
- for x in ${GCC_PROFILES}
- do
- if [ -f "${x}" ]
- then
- source "${x}"
-
- if [ -z "${MY_LDPATH}" ]
- then
- if [ -d "${LDPATH}" ]
- then
- MY_LDPATH="${LDPATH}"
- fi
- else
- if [ -d "${LDPATH}" ]
- then
- MY_LDPATH="${MY_LDPATH}:${LDPATH}"
- fi
- fi
- fi
- done
-
- # Setup things properly again for this profile
- source "${ROOT}etc/env.d/gcc/${CC_COMP}"
-
- # Setup ${ROOT}etc/env.d/05gcc
- ${AWK} '!/^STDCXX_INCDIR=|^LDPATH=/ {print $0}' \
- "/etc/env.d/gcc/${CC_COMP}" > ${ROOT}etc/env.d/05gcc
-
- # Add our custom LDPATH
- echo "LDPATH=\"${MY_LDPATH}\"" >> ${ROOT}etc/env.d/05gcc
-
- # Make sure we do not recreate /lib/cpp and /usr/bin/cc ...
-# echo "DISABLE_GEN_GCC_WRAPPERS=\"yes\"" >> ${ROOT}etc/env.d/05gcc
-
- echo "CURRENT=${CC_COMP}" > ${ROOT}etc/env.d/gcc/config
-
- source /etc/profile
-
- # These might not be installed, and we want to update the mtime
- # for ccache and distcc anyhow ...
- ${RM} -f ${ROOT}lib/cpp
- ${CP} -f ${ROOT}usr/lib/gcc-config/wrapper ${ROOT}lib/cpp
- for x in gcc cpp cc c++ g++ "${CHOST}-gcc" "${CHOST}-c++" "${CHOST}-g++"
- do
- ${RM} -f "${ROOT}usr/bin/${x}"
- ${CP} -f ${ROOT}usr/lib/gcc-config/wrapper "${ROOT}usr/bin/${x}"
-
- if [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
- then
- ${TOUCH} -m "${ROOT}usr/bin/${x}"
- fi
- done
-
-
- ${ENV_UPDATE} &> /dev/null
-
- eend 0
-
- if [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
- then
- echo
- ewarn "If you intend to use the gcc from the new profile in an already"
- ewarn "running shell, please remember to do:"
- echo
- ewarn " # source /etc/profile"
- echo
- fi
-
- return 0
-}
-
-get_current_profile() {
- if [ ! -f ${ROOT}etc/env.d/gcc/config ]
- then
- eerror "$0: No gcc profile is active!"
- return 1
- fi
-
- source ${ROOT}etc/env.d/gcc/config
-
- if [ -z "${CURRENT}" ]
- then
- eerror "$0: No gcc profile is active!"
- return 1
- fi
-
- echo "${CURRENT}"
-
- return 0
-}
-
-list_profiles() {
- if [ ! -f ${ROOT}etc/env.d/gcc/config ]
- then
- eerror "$0: No gcc profile is active!"
- return 1
- fi
-
- for x in ${ROOT}etc/env.d/gcc/*
- do
- if [ -f "${x}" -a "${x}" != "${ROOT}etc/env.d/gcc/config" ]
- then
- echo "${x##*/}"
- fi
- done
-}
-
-print_environ() {
- local OLDPATH="${PATH}"
-
- source "${ROOT}etc/env.d/gcc/${CC_COMP}"
-
- echo "export PATH=\"${PATH}:${OLDPATH}\""
-
-# if [ -z "${LD_LIBRARY_PATH}" ]
-# then
-# echo "export LD_LIBRARY_PATH=\"${LDPATH}\""
-# else
-# echo "export LD_LIBRARY_PATH=\"${LDPATH}:${LD_LIBRARY_PATH}\""
-# fi
-
- echo "export CC=\"${CC}\""
- echo "export CXX=\"${CXX}\""
-}
-
-get_bin_path() {
- source "${ROOT}etc/env.d/gcc/${CC_COMP}"
-
- echo "${PATH}"
-
- return 0
-}
-
-get_lib_path() {
- source "${ROOT}etc/env.d/gcc/${CC_COMP}"
-
- echo "${LDPATH}"
-
- return 0
-}
-
-get_stdcxx_incdir() {
- source "${ROOT}etc/env.d/gcc/${CC_COMP}"
-
- eerror "${LDPATH}/include/${STDCXX_INCDIR}"
-
- return 0
-}
-
-# ===============================================================
-# cross-compiler install portions
-
-get_arch()
-
-{
- echo $1 | \
- awk -F '-' '{print $1}' \
- sed -e 's/arm.*/arm/'
- return
-
- # this might work....
-# case ${ACCHOST} in
-# i[3456]86-*) ADIR="arch-x86" ;;
-# alpha-*) ADIR="arch-alpha" ;;
-# arm*-*) ADIR="arch-arm" ;;
-# hppa-*) ADIR="arch-hppa" ;;
-# mips-*) ADIR="arch-mips" ;;
-# powerpc-*) ADIR="arch-powerpc" ;;
-# sparc-*) ADIR="arch-sparc" ;;
-# *) echo "bad CHOST spec"; exit 0 ;;
-# esac
-
- # and this might give better substring matching
- if [ $(expr "${ACCHOST}" : 'i[3456]86') -eq 4 ]; then
- # x86
- echo "x86"
- elif [ $(expr "${ACCHOST}" : alpha) -eq 5 ]; then
- # Alpha
- echo "alpha"
- elif [ $(expr "${ACCHOST}" : arm) -eq 3 ]; then
- # ARM
- echo "arm"
- elif [ $(expr "${ACCHOST}" : hppa) -eq 4 ]; then
- # HP PA-Risc
- echo "hppa"
- elif [ $(expr "${ACCHOST}" : mips) -eq 4 ]; then
- # MIPS
- echo "mips"
- elif [ $(expr "${ACCHOST}" : powerpc) -eq 7 ]; then
- # PowerPC
- echo "ppc"
- elif [ $(expr "${ACCHOST}" : sparc) -eq 5 ]; then
- # sparc
- echo "sparc"
- else
- echo "unknown CHOST=${ACCHOST} - time to hack on gcc-config"
- exit 1
- fi
-}
-
-EMERGE="/usr/bin/emerge"
-
-install_toolchain() {
- local ADIR PADIR x
- local ACCHOST="${CC_COMP%-*}"
- local AGCCVERS="${CC_COMP##*-}"
- local AROOT="${ROOT}usr/${ACCHOST}/"
- local PORTDIR="$(portage_setting PORTDIR)"
-
- get_real_chost
-
- [ -z "${ACCHOST}" -o -z "${AGCCVERS}" ] && \
- die "Invalid profile specification"
-
- [ -f "${ROOT}etc/env.d/gcc/${CC_COMP}" ] && \
- die "Toolchain is already installed, use --force"
-
- [ "${ACCHOST}" = "${REAL_CHOST}" ] && \
- echo "gcc-config should not be used to build a native toolchain"
-
- ebegin "Installing cross-compiling toolchain for ${ACCHOST}-${AGCCVERS}"
-
- [ -n "${ROOT}" ] && AROOT="${ROOT}${AROOT}"
-
- einfo "Creating ${AROOT}..."
- mkdir -p "${AROOT}" || die "Unable to create ${AROOT}"
-
- AARCH="$(get-arch ${ACCHOST})"
- ADIR="arch-${AARCH}"
- einfo "Looking for ${AARCH}-headers..."
- if ! emerge --pretend "sys-kernel/${AARCH}-headers"
- then
- einfo "Using default linux-headers..."
- AHDRS="linux"
- else
- einfo "Using arch specific ${AARCH}-headers..."
- AHDRS="${AARCH}"
- fi
-
- # create the portage arch directory, if it doesn't exist
- PADIR="${PORTDIR}/${ADIR}"
- if [ ! -d "${PADIR}" ]; then
- einfo "Creating ${PADIR} symlinks..."
- mkdir "${PADIR}" || die "Can't create ${PADIR}"
- ( cd "${PADIR}" &&
- for x in sys-devel/binutils sys-devel/gcc sys-libs/glibc \
- "sys-kernel/${AHDRS}-headers"
- do
- ln -s ../$x
- done
- ) || die "Unable to create symlinks in ${PADIR}"
- fi
-
- ACCEPT_KEYWORDS="${AARCH}" ARCH="${AARCH}" CCHOST="${ACCHOST}" \
- USE="build ${AARCH}" ${EMERGE} \
- ${ADIR}/binutils ${ADIR}/${AHDRS}-headers \
- ">=${ADIR}/gcc-${AGCCVERS}*" "${ADIR}/glibc" || \
- die "Unable to merge cross toolchain for ${ACCHOST}"
-
- ACCEPT_KEYWORDS="${AARCH}" CCHOST="${ACCHOST}" ARCH="${AARCH}" \
- USE="${AARCH}" ${EMERGE} \
- ">=${ADIR}/gcc-${AGCCVERS}*" || \
- die "Unable to merge cross toolchain for ${ACCHOST}"
-
- eend 0
-
-}
-
-#
-# Unmerge the cross compiler.
-#
-
-remove_toolchain()
-
-{
- local AARCH="$(get_arch $1)"
- local ADIR="arch-${AARCH}"
- local AHDRS APKGS
-
- if [ ! -d ${PORTDIR}/arch-${ARCH} ]; then
- echo A compiler for $1 is not installed
- return
- fi
-
- [ -d "${PORTDIR}/sys-kernel/${AARCH}-headers" ]
- AHDRS="${AARCH}" || AHDRS="linux"
-
- APKGS="${ADIR}/binutils ${ADIR}/${AARCH}-headers ${ADIR}/glibc ${ADIR}/gcc"
-
- ACCEPT_KEYWORDS="${AARCH}" \
- ARCH="${AARCH}" \
- CCHOST=${1} \
- ${EMERGE} unmerge ${APKGS} || \
- ewarn "Errors unmerging parts of the toolchain..."
-}
-
-# ===============================================================
-# Main program begins here
-
-NEED_ACTION="yes"
-DOIT="switch_profile"
-CHECK_CHOST="no"
-
-for x in $*
-do
- case "${x}" in
- # Only use specified compiler if one is not already selected.
- --use-old)
- if get_current_profile &> /dev/null
- then
- CC_COMP="$(get_current_profile)"
- fi
- ;;
- --use-portage-chost)
- CHECK_CHOST="yes"
- ;;
- --get-current-profile)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_current_profile"
- fi
- ;;
- --list-profiles)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="list_profiles"
- fi
- ;;
- --print-environ)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="print_environ"
- fi
- ;;
- --get-bin-path)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_bin_path"
- fi
- ;;
- --get-lib-path)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_lib_path"
- fi
- ;;
- --get-stdcxx-incdir)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="get_stdcxx_incdir"
- fi
- ;;
- --install-toolchain)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="install_toolchain"
- fi
- ;;
- --remove-toolchain)
- if [ "${NEED_ACTION}" = "yes" ]
- then
- NEED_ACTION="no"
- DOIT="remove_toolchain"
- fi
- ;;
- --*)
- eerror "$0: Invalid switch! Run $0 without parameters for help."
- exit 1
- ;;
- *)
- if [ -z "${CC_COMP}" ]
- then
- CC_COMP="${x}"
- fi
- ;;
- esac
-done
-
-if [ \( "${DOIT}" = "install_toolchain" -o \
- "${DOIT}" = "switch_profile" \) -a \
- -z "${CC_COMP}" ]
-then
- usage
-fi
-
-if [ -z "${CC_COMP}" ]
-then
- if get_current_profile &> /dev/null
- then
- CC_COMP="$(get_current_profile)"
- else
- eerror "$0: No default profile setup!"
- exit 1
- fi
-fi
-
-if [ "${DOIT}" != "install_toolchain" -a \
- \( ! -d "${ROOT}usr/lib/gcc-lib/${CC_COMP%-*}/${CC_COMP##*-}" -o \
- ! -f "${ROOT}etc/env.d/gcc/${CC_COMP}" \) ]
-then
- eerror "$0: Profile does not exist or invalid setting for /etc/env.d/gcc/${CC_COMP}"
- #exit 1
-fi
-
-if [ "${CHECK_CHOST}" = "yes" ]
-then
- # Chosen CHOST are not the same as the real CHOST according to
- # make.conf, and --use-portage-chost option was given, so do nothing
- get_real_chost
- [ "${CC_COMP%-*}" != "${REAL_CHOST}" ] && exit 0
-fi
-
-eval ${DOIT}
-
-
-# vim:ts=4
diff --git a/sys-devel/gcc-config/files/wrapper-1.4.1.c b/sys-devel/gcc-config/files/wrapper-1.4.1.c
deleted file mode 100644
index 4c4b04628871..000000000000
--- a/sys-devel/gcc-config/files/wrapper-1.4.1.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/*
- * Copyright 1999-2004 Gentoo Foundation
- * Distributed under the terms of the GNU General Public License v2
- * $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/wrapper-1.4.1.c,v 1.4 2004/08/19 15:16:25 vapier Exp $
- * Author: Martin Schlemmer <azarah@gentoo.org>
- */
-
-#define _REENTRANT
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <unistd.h>
-#include <wait.h>
-#include <libgen.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-
-#define GCC_CONFIG "/usr/bin/gcc-config"
-
-#ifndef CC_PROFILE
-# define ENVD_FILE "/etc/env.d/05gcc"
-#else
-# define ENVD_FILE "/etc/env.d/gcc/" CC_PROFILE
-#endif
-
-struct wrapper_data {
- char name[MAXPATHLEN + 1];
- char fullname[MAXPATHLEN + 1];
- char bin[MAXPATHLEN + 1];
- char tmp[MAXPATHLEN + 1];
-
- char *path;
-};
-
-static const char *wrapper_strerror(int err, struct wrapper_data *data)
-{
- strerror_r(err, data->tmp, sizeof(data->tmp));
- return data->tmp;
-}
-
-static void wrapper_exit(char *msg, ...)
-{
- va_list args;
- fprintf(stderr, "gcc-config error:");
- va_start(args, msg);
- vfprintf(stderr, msg, args);
- va_end(args);
- exit(1);
-}
-
-/* check_for_target checks in path for the file we are seeking
- * it returns 1 if found (with data->bin setup), 0 if not and
- * negative on error
- */
-static int check_for_target(char *path, struct wrapper_data *data)
-{
- struct stat sbuf;
- int result = 0;
- char *str = data->tmp;
- size_t len = strlen(path) + strlen(data->name) + 2;
-
- snprintf(str, len, "%s/%s", path, data->name);
-
- /* Stat possible file to check that
- * 1) it exist and is a regular file, and
- * 2) it is not the wrapper itself, and
- * 3) it is in a /gcc-bin/ directory tree
- */
- result = stat(str, &sbuf);
- if ((0 == result) && (sbuf.st_mode & S_IFREG) &&
- (0 != strcmp(str, data->fullname)) &&
- (0 != strstr(str, "/gcc-bin/"))) {
-
- strncpy(data->bin, str, MAXPATHLEN);
- data->bin[MAXPATHLEN] = 0;
- result = 1;
- }
- else
- result = 0;
-
- return result;
-}
-
-static int find_target_in_path(struct wrapper_data *data)
-{
- char *token = NULL, *str = data->tmp, *state;
-
- if (NULL == data->path) return 0;
-
- /* Make a copy since strtok_r will modify path */
- snprintf(str, MAXPATHLEN + 1, "%s", data->path);
-
- token = strtok_r(str, ":", &state);
-
- /* Find the first file with suitable name in PATH. The idea here is
- * that we do not want to bind ourselfs to something static like the
- * default profile, or some odd environment variable, but want to be
- * able to build something with a non default gcc by just tweaking
- * the PATH ... */
- while ((NULL != token) && (strlen(token) > 0)) {
-
- if (check_for_target(token, data))
- return 1;
-
- token = strtok_r(NULL, ":", &state);
- }
-
- return 0;
-}
-
-/* find_target_in_envd parses /etc/env.d/05gcc, and tries to
- * extract PATH, which is set to the current profile's bin
- * directory ...
- */
-static int find_target_in_envd(struct wrapper_data *data)
-{
- FILE *envfile = NULL;
- char *token = NULL, *str = data->tmp, *state;
-
- if (NULL == data->path) return 0;
-
- envfile = fopen(ENVD_FILE, "r");
- if (NULL == envfile)
- return 0;
-
- while (0 != fgets(str, MAXPATHLEN, envfile)) {
-
- /* Keep reading ENVD_FILE until we get a line that
- * starts with 'PATH='
- */
- if (((str) && (strlen(str) > strlen("PATH=")) &&
- 0 == strncmp("PATH=", str, strlen("PATH=")))) {
-
- token = strtok_r(str, "=", &state);
- if ((NULL != token) && (strlen(token) > 0))
- /* The second token should be the value of PATH .. */
- token = strtok_r(NULL, "=", &state);
- else {
- fclose(envfile);
- return 0;
- }
-
- if ((NULL != token) && (strlen(token) > 0)) {
-
- str = token;
- /* A bash variable may be unquoted, quoted with " or
- * quoted with ', so extract the value without those ..
- */
- token = strsep(&str, "\n\"\'");
-
- while (NULL != token) {
-
- if (check_for_target(token, data)) {
-
- fclose(envfile);
- return 1;
- }
-
- token = strsep(&str, "\n\"\'");
- }
- }
-
- }
- str = data->tmp;
- }
-
- fclose(envfile);
-
- return 0;
-}
-
-static void find_wrapper_target(struct wrapper_data *data)
-{
- FILE *inpipe = NULL;
- char *str = data->tmp;
-
-#ifndef CC_PROFILE
- if (find_target_in_path(data))
- return;
-#endif
-
- if (find_target_in_envd(data))
- return;
-
- /* Only our wrapper is in PATH, so
- get the CC path using gcc-config and
- execute the real binary in there... */
-#ifndef CC_PROFILE
- inpipe = popen(GCC_CONFIG " --get-bin-path", "r");
-#else
- inpipe = popen(GCC_CONFIG " --get-bin-path " CC_PROFILE, "r");
-#endif
- if (NULL == inpipe)
- wrapper_exit(
- "Could not open pipe: %s\n",
- wrapper_strerror(errno, data));
-
- if (0 == fgets(str, MAXPATHLEN, inpipe))
- wrapper_exit(
- "Could not get compiler binary path: %s\n",
- wrapper_strerror(errno, data));
-
- strncpy(data->bin, str, sizeof(data->bin) - 1);
- data->bin[strlen(data->bin) - 1] = '/';
- strncat(data->bin, data->name, sizeof(data->bin) - 1);
- data->bin[MAXPATHLEN] = 0;
-
- pclose(inpipe);
-}
-
-/* This function modifies PATH to have gcc's bin path appended */
-static void modify_path(struct wrapper_data *data)
-{
- char *newpath = NULL, *token = NULL, *state;
- char dname_data[MAXPATHLEN + 1];
- char *str = data->tmp, *str2 = dname_data, *dname = dname_data;
- size_t len = 0;
-
- if (NULL == data->bin)
- return;
-
- snprintf(str2, MAXPATHLEN + 1, "%s", data->bin);
-
- if (NULL == (dname = dirname(str2)))
- return;
-
- if (NULL == data->path)
- return;
-
- /* Make a copy since strtok_r will modify path */
- snprintf(str, MAXPATHLEN + 1, "%s", data->path);
-
- token = strtok_r(str, ":", &state);
-
- /* Check if we already appended our bin location to PATH */
- if ((NULL != token) && (strlen(token) > 0)) {
- if (0 == strcmp(token, dname))
- return;
- }
-
- len = strlen(dname) + strlen(data->path) + 2;
-
- newpath = (char *)malloc(len);
- if (NULL == newpath)
- wrapper_exit("out of memory\n");
- memset(newpath, 0, len);
-
- snprintf(newpath, len, "%s:%s", dname, data->path);
- setenv("PATH", newpath, 1);
-
- if (newpath)
- free(newpath);
- newpath = NULL;
-}
-
-int main(int argc, char **argv)
-{
- struct wrapper_data *data;
- size_t size;
- char *path;
- int result = 0;
-
- data = alloca(sizeof(*data));
- if (NULL == data)
- wrapper_exit("%s wrapper: out of memory\n", argv[0]);
- memset(data, 0, sizeof(*data));
-
- path = getenv("PATH");
- if (NULL != path) {
- data->path = strdup(getenv("PATH"));
- if (NULL == data->path)
- wrapper_exit("%s wrapper: out of memory\n", argv[0]);
- }
-
- /* What should we find ? */
- strcpy(data->name, basename(argv[0]));
-
- /* cc calls "/full/path/to/gcc" ... */
- if (0 == strcmp(data->name, "cc"))
- strcpy(data->name, "gcc");
-
- /* What is the full name of our wrapper? */
- size = sizeof(data->fullname);
- result = snprintf(data->fullname, size, "/usr/bin/%s", data->name);
- if ((-1 == result) || (result > size))
- wrapper_exit("invalid wrapper name: \"%s\"\n", data->name);
-
- find_wrapper_target(data);
-
- modify_path(data);
-
- if (data->path)
- free(data->path);
- data->path = NULL;
-
- /* Set argv[0] to the correct binary, else gcc do not find internal
- * headers, etc (bug #8132). */
- argv[0] = data->bin;
-
- /* Ok, do it ... */
- if (execv(data->bin, argv) < 0)
- wrapper_exit("Could not run/locate \"%s\"\n", data->name);
-
- return 0;
-}
-
diff --git a/sys-devel/gcc-config/files/wrapper-1.4.c b/sys-devel/gcc-config/files/wrapper-1.4.c
deleted file mode 100644
index c3d5d0496153..000000000000
--- a/sys-devel/gcc-config/files/wrapper-1.4.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright 1999-2004 Gentoo Foundation
- * Distributed under the terms of the GNU General Public License v2
- * Author: Martin Schlemmer <azarah@gentoo.org>
- * $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/wrapper-1.4.c,v 1.3 2004/09/28 01:57:58 swegener Exp $
- */
-
-#define _REENTRANT
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <unistd.h>
-#include <wait.h>
-#include <libgen.h>
-#include <string.h>
-#include <stdarg.h>
-#include <errno.h>
-
-struct wrapper_data {
- char name[MAXPATHLEN + 1];
- char fullname[MAXPATHLEN + 1];
- char bin[MAXPATHLEN + 1];
- char tmp[MAXPATHLEN + 1];
-
- char *path;
-};
-
-static const char *wrapper_strerror(int err, struct wrapper_data *data)
-{
- strerror_r(err, data->tmp, sizeof(data->tmp));
- return data->tmp;
-}
-
-static void wrapper_exit(char *msg, ...)
-{
- va_list args;
- va_start(args, msg);
- vfprintf(stderr, msg, args);
- va_end(args);
- exit(1);
-}
-
-/* find_bin checks in path for the file we are seeking
- it returns 1 if found (with data->bin setup), 0 if not
- and negative on error */
-static int check_for_target(char *path, struct wrapper_data *data)
-{
- struct stat sbuf;
- int result = 0;
- char *str = data->tmp;
- size_t len = strlen(path) + strlen(data->name) + 2;
-
- snprintf(str, len, "%s/%s", path, data->name);
-
- /* Stat possible file to check that
- 1) it exist and is a regular file, and
- 2) it is not the wrapper itself, and
- 3) it is in a /gcc-bin/ directory tree */
- result = stat(str, &sbuf);
- if ((0 == result) && (sbuf.st_mode & S_IFREG) &&
- (0 != strcmp(str, data->fullname)) &&
- (0 != strstr(str, "/gcc-bin/"))) {
- strncpy(data->bin, str, MAXPATHLEN);
- data->bin[MAXPATHLEN] = 0;
- result = 1;
- }
- else
- result = 0;
-
- return result;
-}
-
-static int find_target_in_path(struct wrapper_data *data)
-{
- char *token = NULL, *str = data->tmp, *state;
-
- if (NULL == data->path) return 0;
-
- /* Make a copy since strtok_r will modify path */
- snprintf(str, MAXPATHLEN + 1, "%s", data->path);
-
- token = strtok_r(str, ":", &state);
-
- /* Find the first file with suitable name in PATH. The idea here is
- * that we do not want to bind ourselfs to something static like the
- * default profile, or some odd environment variable, but want to be
- * able to build something with a non default gcc by just tweaking
- * the PATH ... */
- while ((NULL != token) && (strlen(token) > 0)) {
- if (check_for_target(token, data))
- return 1;
-
- token = strtok_r(NULL, ":", &state);
- }
-
- return 0;
-}
-
-static void find_wrapper_target(struct wrapper_data *data)
-{
- FILE *inpipe = NULL;
- char *str = data->tmp;
-
- if (find_target_in_path(data))
- return;
-
- /* Only our wrapper is in PATH, so
- get the CC path using gcc-config and
- execute the real binary in there... */
- inpipe = popen("/usr/bin/gcc-config --get-bin-path", "r");
- if (NULL == inpipe) {
- wrapper_exit(
- "Could not open pipe for /usr/bin/gcc-config: %s\n",
- wrapper_strerror(errno, data));
- }
-
- if (0 == fgets(str, MAXPATHLEN, inpipe))
- wrapper_exit("Could not get compiler binary path: %s\n",
- wrapper_strerror(errno, data));
-
- strncpy(data->bin, str, sizeof(data->bin) - 1);
- data->bin[strlen(data->bin) - 1] = '/';
- strncat(data->bin, data->name, sizeof(data->bin) - 1);
- data->bin[MAXPATHLEN] = 0;
-
- pclose(inpipe);
-}
-
-/* This function modifies PATH to have gcc's bin path appended */
-static void modify_path(struct wrapper_data *data)
-{
- char *newpath = NULL, *token = NULL, *state;
- char dname_data[MAXPATHLEN + 1];
- char *str = data->tmp, *str2 = dname_data, *dname = dname_data;
- size_t len = 0;
-
- if (NULL == data->bin)
- return;
-
- snprintf(str2, MAXPATHLEN + 1, "%s", data->bin);
-
- if (NULL == (dname = dirname(str2)))
- return;
-
- if (NULL == data->path)
- return;
-
- /* Make a copy since strtok_r will modify path */
- snprintf(str, MAXPATHLEN + 1, "%s", data->path);
-
- token = strtok_r(str, ":", &state);
-
- /* Check if we already appended our bin location to PATH */
- if ((NULL != token) && (strlen(token) > 0)) {
- if (0 == strcmp(token, dname))
- return;
- }
-
- len = strlen(dname) + strlen(data->path) + 2;
-
- newpath = (char *)malloc(len);
- if (NULL == newpath)
- wrapper_exit("wrapper: out of memory\n");
- memset(newpath, 0, len);
-
- snprintf(newpath, len, "%s:%s", dname, data->path);
- setenv("PATH", newpath, 1);
-
- if (newpath)
- free(newpath);
- newpath = NULL;
-}
-
-int main(int argc, char **argv)
-{
- struct wrapper_data *data;
- size_t size;
- char *path;
- int result = 0;
-
- data = alloca(sizeof(*data));
- if (NULL == data)
- wrapper_exit("%s wrapper: out of memory\n", argv[0]);
- memset(data, 0, sizeof(*data));
-
- path = getenv("PATH");
- if (NULL != path) {
- data->path = strdup(getenv("PATH"));
- if (NULL == data->path)
- wrapper_exit("%s wrapper: out of memory\n", argv[0]);
- }
-
- /* What should we find ? */
- strcpy(data->name, basename(argv[0]));
-
- /* cc calls "/full/path/to/gcc" ... */
- if (0 == strcmp(data->name, "cc"))
- strcpy(data->name, "gcc");
-
- /* What is the full name of our wrapper? */
- size = sizeof(data->fullname);
- result = snprintf(data->fullname, size, "/usr/bin/%s", data->name);
- if ((-1 == result) || (result > size))
- wrapper_exit("invalid wrapper name: \"%s\"\n", data->name);
-
- find_wrapper_target(data);
-
- modify_path(data);
-
- if (data->path)
- free(data->path);
- data->path = NULL;
-
- /* Set argv[0] to the correct binary, else gcc do not find internal
- * headers, etc (bug #8132). */
- argv[0] = data->bin;
-
- /* Ok, do it ... */
- if (execv(data->bin, argv) < 0)
- wrapper_exit("Could not run/locate \"%s\"\n", data->name);
-
- return 0;
-}
-
diff --git a/sys-devel/gcc-config/files/wrapper.c b/sys-devel/gcc-config/files/wrapper.c
deleted file mode 100644
index 3c66c02b3d52..000000000000
--- a/sys-devel/gcc-config/files/wrapper.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright 1999-2004 Gentoo Foundation
- * Distributed under the terms of the GNU General Public License v2
- * Author: Martin Schlemmer <azarah@gentoo.org>
- * $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/wrapper.c,v 1.7 2004/09/28 01:57:58 swegener Exp $
- */
-
-#define _REENTRANT
-#define _GNU_SOURCE
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/param.h>
-#include <unistd.h>
-#include <wait.h>
-#include <libgen.h>
-#include <string.h>
-
-
-int main(int argc, char **argv) {
- struct stat sbuf;
- FILE *inpipe = NULL;
- char wrapperbin[MAXPATHLEN + 1], wrapfullname[MAXPATHLEN + 1];
- char *wrappername = NULL;
- char *buffer = NULL, *token = NULL, *tmpstr = NULL, *state = NULL;
- int ret = 0;
-
- wrapperbin[0] = '\0';
-
- /* What should we find ? */
- wrappername = strdupa(basename(argv[0]));
-
- /* cc calls gcc ... */
- if (0 == strcmp(wrappername, "cc"))
- sprintf(wrappername, "%s", "gcc");
-
- /* What is the full name of our wrapper? */
- snprintf(wrapfullname, strlen("/usr/bin/") + strlen(wrappername) + 1,
- "%s%s", "/usr/bin/", wrappername);
-
- /* If PATH is not set, just set token to NULL, else we get
- * a segfault. Thanks to Eric Andresen <ndiin1@cox.net> for
- * reporting this. */
- if (NULL != getenv("PATH")) {
-
- buffer = strdup((char *)getenv("PATH"));
- token = strtok_r(buffer, ":", &state);
- } else
- token = NULL;
-
- /* Find the first file with suitable name in PATH. The idea here is
- * that we do not want to bind ourselfs to something static like the
- * default profile, or some odd environment variable, but want to be
- * able to build something with a non default gcc by just tweaking
- * the PATH ... */
- while ((NULL != token) && (strlen(token) > 0)) {
-
- tmpstr = (char *)malloc(strlen(token) + strlen(wrappername) + 2);
- snprintf(tmpstr, strlen(token) + strlen(wrappername) + 2,
- "%s/%s", token, wrappername);
-
- /* Does it exist and is a file? */
- ret = stat(tmpstr, &sbuf);
- /* It exists, and are not our wrapper, and its in a dir containing
- * gcc-bin ... */
- if ((0 == ret) && (sbuf.st_mode & S_IFREG) &&
- (0 != strcmp(tmpstr, wrapfullname)) && (0 != strstr(tmpstr, "/gcc-bin/"))) {
-
- strncpy(wrapperbin, tmpstr, MAXPATHLEN);
-
- if (tmpstr) {
- free(tmpstr);
- tmpstr = NULL;
- }
-
- break;
- }
-
- token = strtok_r(NULL, ":", &state);
- }
-
- if (buffer) {
- free(buffer);
- buffer = NULL;
- }
-
- /* Did we get a valid binary to execute? */
- if (wrapperbin[0] == '\0') {
-
- /* It is our wrapper, so get the CC path, and execute the real binary in
- * there ... */
- inpipe = popen("/usr/bin/gcc-config --get-bin-path", "r");
- if (NULL == inpipe) {
-
- fprintf(stderr, "Could not run /usr/bin/gcc-config!\n");
- exit(1);
- }
-
- buffer = (char *)malloc(MAXPATHLEN + 1);
-
- if (fgets(buffer, MAXPATHLEN, inpipe) == 0) {
-
- fprintf(stderr, "Could not get compiler binary path!\n");
-
- if (buffer) {
- free(buffer);
- buffer = NULL;
- }
-
- pclose(inpipe);
-
- exit(1);
- }
-
- sscanf(buffer, "%s", wrapperbin);
- strncat(wrapperbin, "/", MAXPATHLEN - strlen(wrapperbin));
- strncat(wrapperbin, wrappername, MAXPATHLEN - strlen(wrapperbin));
-
- pclose(inpipe);
-
- if (buffer) {
- free(buffer);
- buffer = NULL;
- }
- }
-
- /* Set argv[0] to the correct binary, else gcc do not find internal
- * headers, etc (bug #8132). */
- argv[0] = wrapperbin;
-
- /* Ok, do it ... */
- if (execv(wrapperbin, argv) < 0) {
- fprintf(stderr, "Could not run/locate %s!\n", wrappername);
- exit(1);
- }
-
- return 0;
-}
-