summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2004-10-13 16:29:04 +0000
committerMike Frysinger <vapier@gentoo.org>2004-10-13 16:29:04 +0000
commit0ed0103070d340d611c0d157b727e4bbefc66c5c (patch)
treef83536844514828928acbf04df06b688abbfedad
parenttouchup output of list to indicate current profile (diff)
downloadgcc-config-0ed0103070d340d611c0d157b727e4bbefc66c5c.tar.gz
gcc-config-0ed0103070d340d611c0d157b727e4bbefc66c5c.tar.bz2
gcc-config-0ed0103070d340d611c0d157b727e4bbefc66c5c.zip
new version; phear !
-rwxr-xr-xgcc-config161
1 files changed, 86 insertions, 75 deletions
diff --git a/gcc-config b/gcc-config
index 7515fee..e8be4fe 100755
--- a/gcc-config
+++ b/gcc-config
@@ -1,9 +1,11 @@
#!/bin/bash
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.3.6,v 1.8 2004/10/11 14:36:40 vapier Exp $
+# $Header: gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.3.7,v 1.1 2004/10/13 16:29:04 vapier Exp $
# Author: Martin Schlemmer <azarah@gentoo.org>
+trap ":" INT QUIT TSTP
+
source /etc/init.d/functions.sh || {
echo "$0: Could not source /etc/init.d/functions.sh!"
exit 1
@@ -15,26 +17,18 @@ Usage: gcc-config [options] [CC Profile]
Change the current cc/gcc profile, or give info about profiles.
Options:
-
-O, --use-old Use the old profile if one was selected.
-
-P, --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...).
-
-c, --get-current-profile Print current used gcc profile.
-
-l, --list-profiles Print a list of available profiles.
-
-E, --print-environ Print environment that can be used to setup the
current gcc profile, or a specified one.
-
-B, --get-bin-path Print path where binaries of the given/current
profile are located.
-
-L, --get-lib-path Print path where libraries of the given/current
profile are located.
-
-X, --get-stdcxx-incdir Print path where g++ include files of the
given/current profile are located.
@@ -74,7 +68,6 @@ find_path() {
}
cmd_setup() {
-
# Sourcing /etc/env.d/gcc/${CC_COMP} is going to mess up
# PATH among things...
CP="$(find_path cp)"
@@ -90,8 +83,6 @@ cmd_setup() {
ENV_UPDATE="$(find_path env-update)"
}
-CC_COMP=
-
get_real_chost() {
[ -n "${REAL_CHOST}" ] && return 0
@@ -100,7 +91,7 @@ get_real_chost() {
if [ -z "${REAL_CHOST}" ]
then
- eerror "$0: Could not get portage CHOST!"
+ eerror "$0: Could not get portage CHOST!"
return 1
fi
}
@@ -111,9 +102,15 @@ switch_profile() {
local OLD_CC_COMP=
local GCC_BIN_PATH=
- if [ -r /etc/env.d/gcc/config ]
+ if [ "$(id -u)" -ne 0 ]
+ then
+ eerror "$0: Must be root."
+ exit 1
+ fi
+
+ if [ -r "${GCC_ENV_D}/config" ]
then
- source /etc/env.d/gcc/config
+ source "${GCC_ENV_D}/config"
if [ -n "${CURRENT}" ]
then
@@ -121,27 +118,20 @@ switch_profile() {
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...
+ # 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} /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}"
+ GCC_PROFILES="$(${FIND} "${GCC_ENV_D}" -name "${REAL_CHOST}-*" -a ! -name "${CC_COMP}")"
+ GCC_PROFILES="${GCC_ENV_D}/${CC_COMP} ${GCC_PROFILES}"
# Extract all LDPATH's for our CHOST
for x in ${GCC_PROFILES}
@@ -174,19 +164,19 @@ switch_profile() {
done
# Setup things properly again for this profile
- source "/etc/env.d/gcc/${CC_COMP}"
+ source "${GCC_ENV_D}/${CC_COMP}"
# Setup /etc/env.d/05gcc
- ${AWK} '!/^STDCXX_INCDIR=|^LDPATH=/ {print $0}' \
- "/etc/env.d/gcc/${CC_COMP}" > /etc/env.d/05gcc
+ ${AWK} '!/^(STDCXX_INCDIR|LDPATH|CC|CXX)=/ {print $0}' \
+ "${GCC_ENV_D}/${CC_COMP}" > "${ENV_D}/05gcc"
# Add our custom LDPATH
- echo "LDPATH=\"${MY_LDPATH}\"" >> /etc/env.d/05gcc
+ echo "LDPATH=\"${MY_LDPATH}\"" >> "${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 "DISABLE_GEN_GCC_WRAPPERS=\"yes\"" >> "${ENV_D}/05gcc"
- echo "CURRENT=${CC_COMP}" > /etc/env.d/gcc/config
+ echo "CURRENT=${CC_COMP}" > ${GCC_ENV_D}/config
# Save PATH
GCC_BIN_PATH="${PATH}"
@@ -195,35 +185,38 @@ switch_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++ f77 gcj \
+ ${RM} -f "${ROOT}/lib/cpp"
+ ${CP} -f "${ROOT}/usr/lib/gcc-config/wrapper" "${ROOT}/lib/cpp"
+ for x in gcc cpp cc c++ g++ f77 g77 gcj \
${REAL_CHOST}-gcc ${REAL_CHOST}-c++ ${REAL_CHOST}-g++ \
- ${REAL_CHOST}-f77 ${REAL_CHOST}-gcj
+ ${REAL_CHOST}-f77 ${REAL_CHOST}-g77 ${REAL_CHOST}-gcj
do
# Make sure we have no stale wrappers
- ${RM} -f "/usr/bin/${x}"
+ ${RM} -f "${ROOT}/usr/bin/${x}"
- if [ -x "${GCC_BIN_PATH}/${x}" -o \
+ if [ -x "${ROOT}/${GCC_BIN_PATH}/${x}" -o \
"${x}" = "c++" -o "${x}" = "${REAL_CHOST}-c++" -o \
"${x}" = "cpp" -o "${x}" = "cc" ]
then
# Only install a wrapper if the binary exists ...
- ${CP} -f /usr/lib/gcc-config/wrapper "/usr/bin/${x}"
+ ${CP} -f "${ROOT}"/usr/lib/gcc-config/wrapper" \
+ "${ROOT}/usr/bin/${x}"
if [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
then
- ${TOUCH} -m "/usr/bin/${x}"
+ ${TOUCH} -m "${ROOT}/usr/bin/${x}"
fi
fi
done
-
- ${ENV_UPDATE} &> /dev/null
+ if [ "${ROOT}" == "/" ]
+ then
+ ${ENV_UPDATE} &> /dev/null
+ fi
eend 0
- if [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
+ if [ "${ROOT}" == "/" ] && [ "${OLD_CC_COMP}" != "${CC_COMP}" ]
then
echo
ewarn "If you intend to use the gcc from the new profile in an already"
@@ -237,17 +230,17 @@ switch_profile() {
}
get_current_profile() {
- if [ ! -f /etc/env.d/gcc/config ]
+ if [ ! -f "${GCC_ENV_D}/config" ]
then
- eerror "$0: No gcc profile is active!"
+ eerror "$0: No gcc profile is active!"
return 1
fi
- source /etc/env.d/gcc/config
+ source "${GCC_ENV_D}/config"
if [ -z "${CURRENT}" ]
then
- eerror "$0: No gcc profile is active!"
+ eerror "$0: No gcc profile is active!"
return 1
fi
@@ -259,17 +252,20 @@ get_current_profile() {
list_profiles() {
local i=1
- if [ ! -f /etc/env.d/gcc/config ]
+ if [ ! -f "${GCC_ENV_D}/config" ]
then
- eerror "$0: No gcc profile is active!"
- return 1
+ eerror "$0: No gcc profile is active; please select one!"
+ else
+ get_current_profile > /dev/null
fi
- get_current_profile > /dev/null
-
- for x in /etc/env.d/gcc/*
+ if [ "${ROOT}" != "/" ]
+ then
+ echo "Using gcc-config info in ${ROOT}"
+ fi
+ for x in "${GCC_ENV_D}"/*
do
- if [ -f "${x}" -a "${x}" != "/etc/env.d/gcc/config" ]
+ if [ -f "${x}" -a "${x}" != "${GCC_ENV_D}/config" ]
then
x="${x##*/}"
[ "${x}" == "${CURRENT}" ] && x="${x} *"
@@ -284,7 +280,7 @@ print_environ() {
local ENV_CMD=
local SET_ELEMENT=
- source "/etc/env.d/gcc/${CC_COMP}"
+ source "${GCC_ENV_D}/${CC_COMP}"
case ${SHELL} in
*/csh|*/tsch)
@@ -304,41 +300,41 @@ print_environ() {
# else
# echo "${ENV_CMD} LD_LIBRARY_PATH${SET_ELEMENT}\"${LDPATH}:${LD_LIBRARY_PATH}\""
# fi
- echo "${ENV_CMD} CC${SET_ELEMENT}\"${CC}\""
- echo "${ENV_CMD} CXX${SET_ELEMENT}\"${CXX}\""
+# echo "${ENV_CMD} CC${SET_ELEMENT}\"${CC}\""
+# echo "${ENV_CMD} CXX${SET_ELEMENT}\"${CXX}\""
}
get_bin_path() {
- if [ -e /etc/env.d/gcc/${CC_COMP} ] ; then
- source "/etc/env.d/gcc/${CC_COMP}"
+ if [ -e "${GCC_ENV_D}/${CC_COMP}" ] ; then
+ source "${GCC_ENV_D}/${CC_COMP}"
echo "${PATH}"
else
echo "no-config"
- echo "/etc/env.d/gcc/${CC_COMP} doesnt exist" 1>&2
+ echo "${GCC_ENV_D}/${CC_COMP} doesnt exist" 1>&2
fi
return 0
}
get_lib_path() {
- if [ -e /etc/env.d/gcc/${CC_COMP} ] ; then
- source "/etc/env.d/gcc/${CC_COMP}"
+ if [ -e "${GCC_ENV_D}/${CC_COMP}" ] ; then
+ source "${GCC_ENV_D}/${CC_COMP}"
echo "${LDPATH}"
else
echo "no-config"
- echo "/etc/env.d/gcc/${CC_COMP} doesnt exist" 1>&2
+ echo "${GCC_ENV_D}/${CC_COMP} doesnt exist" 1>&2
fi
return 0
}
get_stdcxx_incdir() {
- if [ -e /etc/env.d/gcc/${CC_COMP} ] ; then
- source "/etc/env.d/gcc/${CC_COMP}"
+ if [ -e "${GCC_ENV_D}/${CC_COMP}" ] ; then
+ source "${GCC_ENV_D}/${CC_COMP}"
echo "${LDPATH}/include/${STDCXX_INCDIR}"
else
echo "no-config"
- echo "/etc/env.d/gcc/${CC_COMP} doesnt exist" 1>&2
+ echo "${GCC_ENV_D}/${CC_COMP} doesnt exist" 1>&2
fi
return 0
@@ -348,6 +344,11 @@ NEED_ACTION="yes"
DOIT="switch_profile"
CHECK_CHOST="no"
+CC_COMP=
+[ -z "${ROOT}" ] && ROOT="/"
+ENV_D="${ROOT}etc/env.d"
+GCC_ENV_D="${ENV_D}/gcc"
+
for x in "$@"
do
case "${x}" in
@@ -418,24 +419,34 @@ do
*)
if [ -z "${CC_COMP}" ]
then
- if [ -n "`echo ${x} | gawk '/^[[:digit:]]*$/ { print }'`" ]
+ if [ -z "$(echo ${x} | tr -d '[:digit:]')" ]
then
+ # User gave us a # representing the profile
i=1
- for y in /etc/env.d/gcc/*
+ for y in "${GCC_ENV_D}"/*
do
- [ "${y}" = "/etc/env.d/gcc/config" ] && continue
+ [ "${y}" == "${GCC_ENV_D}/config" ] && continue
- if [ -f "${y}" -a "${x}" -eq "${i}" ]
+ if [ -f "${y}" ] && [ "${x}" -eq "${i}" ]
then
CC_COMP="${y##*/}"
break
- else
- i=$((i + 1))
fi
+ i=$((i + 1))
done
else
+ # User gave us a full HOST-gccver
+ x="${x##*/}"
+ if [ ! -f "${GCC_ENV_D}/${x}" ]
+ then
+ eerror "$0: Could not locate '$x' in '${GCC_ENV_D}/'!"
+ exit 1
+ fi
CC_COMP="${x}"
fi
+ else
+ eerror "$0: Too many arguments! Run $0 without parameters for help."
+ exit 1
fi
;;
esac
@@ -452,17 +463,17 @@ then
then
CC_COMP="$(get_current_profile)"
else
- eerror "$0: No default profile setup!"
+ list_profiles
exit 1
fi
fi
CC_COMP_NO_SPECS=$(echo ${CC_COMP} | awk -F- '{ print $1"-"$2"-"$3"-"$4"-"$5 }')
-if [ ! -d "/usr/lib/gcc-lib/${CC_COMP_NO_SPECS%-*}/${CC_COMP_NO_SPECS##*-}" -o \
- ! -f "/etc/env.d/gcc/${CC_COMP}" ]
+if [ ! -d "${ROOT}/usr/lib/gcc-lib/${CC_COMP_NO_SPECS%-*}/${CC_COMP_NO_SPECS##*-}" -o \
+ ! -f "${GCC_ENV_D}/${CC_COMP}" ]
then
- eerror "$0: Profile does not exist or invalid setting for /etc/env.d/gcc/${CC_COMP}"
+ eerror "$0: Profile does not exist or invalid setting for ${GCC_ENV_D}/${CC_COMP}"
#exit 1
fi