summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <eradicator@gentoo.org>2004-12-28 05:32:10 +0000
committerJeremy Huddleston <eradicator@gentoo.org>2004-12-28 05:32:10 +0000
commit25d1a79053f8f99de6377ad07c64a4c9547862aa (patch)
treed0f4e4208929fab78da086d6ccfad7d855fde1f8 /sys-devel
parentMoved from app-sci/gimps to sci-mathematics/gimps (diff)
downloadgentoo-2-25d1a79053f8f99de6377ad07c64a4c9547862aa.tar.gz
gentoo-2-25d1a79053f8f99de6377ad07c64a4c9547862aa.tar.bz2
gentoo-2-25d1a79053f8f99de6377ad07c64a4c9547862aa.zip
Rolling in support for CFLAGS_${ABI}. Rolling g{cc,++}{32,64} support into the wrapper.
Diffstat (limited to 'sys-devel')
-rw-r--r--sys-devel/gcc-config/ChangeLog10
-rw-r--r--sys-devel/gcc-config/Manifest24
-rw-r--r--sys-devel/gcc-config/files/digest-gcc-config-1.3.8-r2 (renamed from sys-devel/gcc-config/files/digest-gcc-config-1.3.8-r1)0
-rwxr-xr-xsys-devel/gcc-config/files/gcc-config-1.3.87
-rw-r--r--sys-devel/gcc-config/files/wrapper-1.4.4.c (renamed from sys-devel/gcc-config/files/wrapper-1.4.3.c)89
-rw-r--r--sys-devel/gcc-config/gcc-config-1.3.8-r2.ebuild (renamed from sys-devel/gcc-config/gcc-config-1.3.8-r1.ebuild)4
6 files changed, 108 insertions, 26 deletions
diff --git a/sys-devel/gcc-config/ChangeLog b/sys-devel/gcc-config/ChangeLog
index e1bf6ccbb17b..653d1001f0b2 100644
--- a/sys-devel/gcc-config/ChangeLog
+++ b/sys-devel/gcc-config/ChangeLog
@@ -1,6 +1,14 @@
# ChangeLog for sys-devel/gcc-config
# Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/ChangeLog,v 1.71 2004/12/24 05:46:23 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/ChangeLog,v 1.72 2004/12/28 05:32:10 eradicator Exp $
+
+*gcc-config-1.3.8-r2 (27 Dec 2004)
+
+ 27 Dec 2004; Jeremy Huddleston <eradicator@gentoo.org>
+ files/gcc-config-1.3.8, -files/wrapper-1.4.3.c, +files/wrapper-1.4.4.c,
+ -gcc-config-1.3.8-r1.ebuild, +gcc-config-1.3.8-r2.ebuild:
+ Rolling in support for CFLAGS_${ABI}. Rolling g{cc,++}{32,64} support into
+ the wrapper.
*gcc-config-1.3.8-r1 (24 Dec 2004)
diff --git a/sys-devel/gcc-config/Manifest b/sys-devel/gcc-config/Manifest
index 0b0987b1a0fb..cfaf3269f963 100644
--- a/sys-devel/gcc-config/Manifest
+++ b/sys-devel/gcc-config/Manifest
@@ -1,23 +1,13 @@
------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-MD5 ba976e0d3f974115680d3bc3ca22a3a6 gcc-config-1.3.8-r1.ebuild 1359
MD5 edfe90e24dbfe7a49d28f0c37ba4ea8b ChangeLog 14276
MD5 0a250a07d02f1343f64fe7f7bbdbd820 gcc-config-1.3.6-r4.ebuild 2636
-MD5 567094e03359ffc1c95af7356395228d metadata.xml 162
MD5 626c17691d48b229f5c619618bf365c0 gcc-config-1.3.7-r6.ebuild 1395
-MD5 3284763a25d3f43f7c29fc765be2defd files/gcc-config-1.3.8 12381
+MD5 567094e03359ffc1c95af7356395228d metadata.xml 162
+MD5 c4b2c1e00e7b2612d7f9bfdfb2470f70 gcc-config-1.3.8-r2.ebuild 1359
+MD5 afa4e21b4ddbbe57d2267acc6517c9f3 files/wrapper-1.4.4.c 10128
MD5 d41d8cd98f00b204e9800998ecf8427e files/digest-gcc-config-1.3.6-r4 0
-MD5 11d24a6f5defba5a8a8bbc65f26e2215 files/wrapper-1.4.2.c 7439
-MD5 5f5ba2d67203ed8386ae76352f15000d files/gcc-config-1.3.6 10285
-MD5 dc0ff3c291392d8abac22d82a8593ab6 files/wrapper-1.4.3.c 7545
MD5 0c96b0464e9cec87312b5fa06d8c138b files/gcc-config-1.3.7 11800
-MD5 d41d8cd98f00b204e9800998ecf8427e files/digest-gcc-config-1.3.8-r1 0
MD5 d41d8cd98f00b204e9800998ecf8427e files/digest-gcc-config-1.3.7-r6 0
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.9.10 (GNU/Linux)
-
-iD8DBQFBy61HroRuSHgZdywRAmBSAKCPWI+u8Zy95XM6vhrekfxxTbUqGACfWdw8
-lByDvb0Kl3UnVhcDvwUsLkU=
-=Ab6Z
------END PGP SIGNATURE-----
+MD5 eaffc6c97e2506467692c08f57e48c3d files/gcc-config-1.3.8 12326
+MD5 d41d8cd98f00b204e9800998ecf8427e files/digest-gcc-config-1.3.8-r2 0
+MD5 11d24a6f5defba5a8a8bbc65f26e2215 files/wrapper-1.4.2.c 7439
+MD5 5f5ba2d67203ed8386ae76352f15000d files/gcc-config-1.3.6 10285
diff --git a/sys-devel/gcc-config/files/digest-gcc-config-1.3.8-r1 b/sys-devel/gcc-config/files/digest-gcc-config-1.3.8-r2
index e69de29bb2d1..e69de29bb2d1 100644
--- a/sys-devel/gcc-config/files/digest-gcc-config-1.3.8-r1
+++ b/sys-devel/gcc-config/files/digest-gcc-config-1.3.8-r2
diff --git a/sys-devel/gcc-config/files/gcc-config-1.3.8 b/sys-devel/gcc-config/files/gcc-config-1.3.8
index ee8c1176252f..382fc6717f5c 100755
--- a/sys-devel/gcc-config/files/gcc-config-1.3.8
+++ b/sys-devel/gcc-config/files/gcc-config-1.3.8
@@ -1,7 +1,7 @@
#!/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.3.8,v 1.2 2004/12/24 05:46:24 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/gcc-config-1.3.8,v 1.3 2004/12/28 05:32:10 eradicator Exp $
# Author: Martin Schlemmer <azarah@gentoo.org>
trap ":" INT QUIT TSTP
@@ -212,9 +212,8 @@ switch_profile() {
# This should probably get folded back into the wrapper ...
if [[ ${x:${#x}-3} = "gcc" ]] || [[ ${x:${#x}-3} = "g++" ]] ; then
for bits in ${GCCBITS} ; do
- echo "#!/bin/sh"$'\n'"exec ${x} -m${bits} \"\$@\"" \
- > "${ROOT}/usr/bin/${x}${bits}"
- chmod 755 "${ROOT}/usr/bin/${x}${bits}"
+ cp -f "${ROOT}/usr/lib/gcc-config/wrapper" \
+ "${ROOT}/usr/bin/${x}${bits}"
done
fi
fi
diff --git a/sys-devel/gcc-config/files/wrapper-1.4.3.c b/sys-devel/gcc-config/files/wrapper-1.4.4.c
index 80e1a81d2623..e94f1f3475ae 100644
--- a/sys-devel/gcc-config/files/wrapper-1.4.3.c
+++ b/sys-devel/gcc-config/files/wrapper-1.4.4.c
@@ -1,7 +1,7 @@
/*
* 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.3.c,v 1.2 2004/12/23 18:04:06 vapier Exp $
+ * $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/files/wrapper-1.4.4.c,v 1.1 2004/12/28 05:32:10 eradicator Exp $
* Author: Martin Schlemmer <azarah@gentoo.org>
*/
@@ -23,6 +23,9 @@
#define GCC_CONFIG "/usr/bin/gcc-config"
#define ENVD_BASE "/etc/env.d/05gcc"
+#define MAXNEWFLAGS 32
+#define MAXFLAGLEN 127
+
struct wrapper_data {
char name[MAXPATHLEN + 1];
char fullname[MAXPATHLEN + 1];
@@ -30,6 +33,8 @@ struct wrapper_data {
char tmp[MAXPATHLEN + 1];
char *path;
+ char newflags[MAXNEWFLAGS][MAXFLAGLEN + 1];
+ unsigned newflagsCount;
};
static const char *wrapper_strerror(int err, struct wrapper_data *data)
@@ -249,12 +254,15 @@ static void modify_path(struct wrapper_data *data)
putenv(newpath);
}
+#define lastOfStr(str, n) ((str) + strlen(str) - (n))
+
int main(int argc, char *argv[])
{
struct wrapper_data *data;
size_t size;
char *path;
int result = 0;
+ char **newargv = argv;
data = alloca(sizeof(*data));
if (data == NULL)
@@ -293,8 +301,85 @@ int main(int argc, char *argv[])
* http://bugs.gentoo.org/show_bug.cgi?id=8132 */
argv[0] = data->bin;
+ /* If this is g{cc,++}{32,64}, we need to add -m{32,64}
+ * otherwise we need to add ${CFLAGS_${ABI}}
+ */
+ if(!strcmp(lastOfStr(data->bin, 2), "32") ) {
+ strcpy(data->newflags[data->newflagsCount], "-m32");
+ data->bin[strlen(data->bin) - 2] = '\0';
+ data->newflagsCount++;
+ } else if (!strcmp(lastOfStr(data->bin, 2), "64") ) {
+ data->bin[strlen(data->bin) - 2] = '\0';
+ strcpy(data->newflags[data->newflagsCount], "-m64");
+ data->newflagsCount++;
+ } else if(getenv("ABI")) {
+ char *envar = (char *)malloc(sizeof(char) *
+ (strlen("CFLAGS_") + strlen(getenv("ABI")) + 1 ));
+ if(!envar)
+ wrapper_exit("%s wrapper: out of memory\n", argv[0]);
+
+ /* We use CFLAGS_${ABI} for gcc, g++, g77, etc as they are
+ * the same no matter which compiler we are using.
+ */
+ sprintf(envar, "CFLAGS_%s", getenv("ABI"));
+
+ if(getenv(envar)) {
+ const char *newflagsStr = getenv(envar);
+ unsigned s, f; /* start/finish of each flag. f points to
+ * the char AFTER the end (ie the space/\0
+ */
+
+ /* Tokenize the flag list */
+ for(s=0; s < strlen(newflagsStr); s=f+1) {
+ /* Put s at the start of the next flag */
+ while(newflagsStr[s] == ' ' ||
+ newflagsStr[s] == '\t')
+ s++;
+ if(s == strlen(newflagsStr))
+ break;
+
+ f = s + 1;
+ while(newflagsStr[f] != ' ' &&
+ newflagsStr[f] != '\t' &&
+ newflagsStr[f] != '\0')
+ f++;
+
+ /* Detect overrun */
+ if(MAXFLAGLEN < f - s || MAXNEWFLAGS == data->newflagsCount)
+ wrapper_exit("%s wrapper: Exiting due to inadequate buffer space. Preventing buffer overrun.\n", argv[0]);
+
+ strncpy(data->newflags[data->newflagsCount], newflagsStr + s, f - s);
+ data->newflagsCount++;
+ }
+ }
+
+ free(envar);
+ }
+
+ if(data->newflagsCount) {
+ unsigned i;
+
+ /* Make room for the original, new ones, and the NULL terminator */
+ newargv = (char **)malloc(sizeof(char *) * (argc + data->newflagsCount + 1));
+ if(!newargv)
+ wrapper_exit("Unable to allocate enough memory for new argv[].");
+
+ /* We just use the existing argv[i] as the start. */
+ for(i=0; i < argc; i++) {
+ newargv[i] = argv[i];
+ }
+
+ /* Now we want to append our newflags list. */
+ for(; i < argc + data->newflagsCount; i++) {
+ newargv[i] = data->newflags[i - argc];
+ }
+
+ /* And now cap it off... */
+ newargv[i] = NULL;
+ }
+
/* Ok, do it ... */
- if (execv(data->bin, argv) < 0)
+ if (execv(data->bin, newargv) < 0)
wrapper_exit("Could not run/locate \"%s\"\n", data->name);
return 0;
diff --git a/sys-devel/gcc-config/gcc-config-1.3.8-r1.ebuild b/sys-devel/gcc-config/gcc-config-1.3.8-r2.ebuild
index f9f558c4ffcf..b20970f330c4 100644
--- a/sys-devel/gcc-config/gcc-config-1.3.8-r1.ebuild
+++ b/sys-devel/gcc-config/gcc-config-1.3.8-r2.ebuild
@@ -1,11 +1,11 @@
# 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/gcc-config-1.3.8-r1.ebuild,v 1.1 2004/12/24 05:46:23 vapier Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-devel/gcc-config/gcc-config-1.3.8-r2.ebuild,v 1.1 2004/12/28 05:32:10 eradicator Exp $
inherit toolchain-funcs
# Version of .c wrapper to use
-W_VER="1.4.3"
+W_VER="1.4.4"
DESCRIPTION="Utility to change the gcc compiler being used"
HOMEPAGE="http://www.gentoo.org/"