diff options
author | Mike Frysinger <vapier@gentoo.org> | 2004-10-25 13:57:29 +0000 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2004-10-25 13:57:29 +0000 |
commit | ea08fd7f40276b67305929bc50bd4911122aabb3 (patch) | |
tree | d075fe56d9d1abdf634e78f350b965aa2a924755 /sys-devel | |
parent | Version bump; updated HOMEPAGE and SRC_URI; respect user CFLAGS; use make ins... (diff) | |
download | historical-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/Manifest | 11 | ||||
-rw-r--r-- | sys-devel/gcc-config/files/gcc-config-1.4 | 550 | ||||
-rw-r--r-- | sys-devel/gcc-config/files/gcc-config-1.4.1 | 600 | ||||
-rw-r--r-- | sys-devel/gcc-config/files/wrapper-1.4.1.c | 311 | ||||
-rw-r--r-- | sys-devel/gcc-config/files/wrapper-1.4.c | 228 | ||||
-rw-r--r-- | sys-devel/gcc-config/files/wrapper.c | 141 |
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; -} - |