[uClibc]gcc wrapper patch
Michael E Brown
mebrown at michaels-house.net
Sat Jan 5 20:48:45 UTC 2002
Attached is a small patch which adds support to set DEVEL_PREFIX and
BUILD_DIR at runtime instead of having to recompile the wrapper. As far as
I know, no existing behaviour is changed by this patch.
--
Michael Brown
-------------- next part --------------
diff -ruP uClibc/extra/gcc-uClibc/gcc-uClibc.c uClibc-meb/extra/gcc-uClibc/gcc-uClibc.c
--- uClibc/extra/gcc-uClibc/gcc-uClibc.c Thu Dec 20 04:31:15 2001
+++ uClibc-meb/extra/gcc-uClibc/gcc-uClibc.c Wed Jan 2 15:55:27 2002
@@ -77,30 +77,7 @@
#include "gcc-uClibc.h"
-static char *rpath_link[] = {
- "-Wl,-rpath-link,"UCLIBC_DEVEL_PREFIX"/lib",
- "-Wl,-rpath-link,"UCLIBC_BUILD_DIR"/lib"
-};
-
-static char *rpath[] = {
- "-Wl,-rpath,"UCLIBC_DEVEL_PREFIX"/lib",
- "-Wl,-rpath,"UCLIBC_BUILD_DIR"/lib"
-};
-
-static char *uClibc_inc[] = {
- "-I"UCLIBC_DEVEL_PREFIX"/include/",
- "-I"UCLIBC_BUILD_DIR"/include/"
-};
-
-static char *crt0_path[] = {
- UCLIBC_DEVEL_PREFIX"/lib/crt0.o",
- UCLIBC_BUILD_DIR"/lib/crt0.o"
-};
-
-static char *lib_path[] = {
- "-L"UCLIBC_DEVEL_PREFIX"/lib",
- "-L"UCLIBC_BUILD_DIR"/lib"
-};
+char * mebcat( char *a, char *b, char *c) ;
static char *usr_lib_path = "-L"UCLIBC_DEVEL_PREFIX"/lib";
@@ -118,8 +95,45 @@
int i, j;
char ** gcc_argv;
char *dlstr;
+ char *incstr;
+ char *devprefix;
+ char *builddir;
+ char *libstr;
char *build_dlstr;
char *ep;
+ char *rpath_link[2];
+ char *rpath[2];
+ char *uClibc_inc[2];
+ char *crt0_path[2];
+ char *lib_path[2];
+
+ devprefix = getenv("UCLIBC_DEVEL_PREFIX");
+ if (!devprefix) {
+ devprefix = UCLIBC_DEVEL_PREFIX;
+ }
+
+ builddir = getenv("UCLIBC_BUILD_DIR");
+ if (!builddir) {
+ builddir = UCLIBC_BUILD_DIR;
+ }
+
+ incstr = getenv("UCLIBC_GCC_INC");
+ libstr = getenv("UCLIBC_GCC_LIB");
+
+ rpath_link[0] = mebcat("-Wl,-rpath-link,", devprefix, "/lib");
+ rpath_link[1] = mebcat("-Wl,-rpath-link,", builddir, "/lib");
+
+ rpath[0] = mebcat("-Wl,-rpath,", devprefix, "/lib");
+ rpath[1] = mebcat("-Wl,-rpath,", builddir, "/lib");
+
+ uClibc_inc[0] = mebcat("-I", devprefix, "/include/");
+ uClibc_inc[1] = mebcat("-I", builddir, "/include/");
+
+ crt0_path[0] = mebcat("", devprefix, "/lib/crt0.o");
+ crt0_path[1] = mebcat("", builddir, "/lib/crt0.o");
+
+ lib_path[0] = mebcat("-L", devprefix, "/lib");
+ lib_path[1] = mebcat("-L", builddir, "/lib");
build_dlstr = "-Wl,--dynamic-linker," BUILD_DYNAMIC_LINKER;
dlstr = getenv("UCLIBC_GCC_DLOPT");
@@ -218,6 +232,8 @@
gcc_argv[i++] = nostdinc;
gcc_argv[i++] = uClibc_inc[use_build_dir];
gcc_argv[i++] = GCC_INCDIR;
+ if( incstr )
+ gcc_argv[i++] = incstr;
}
if (linking && source_count) {
@@ -232,6 +248,8 @@
}
}
gcc_argv[i++] = rpath_link[use_build_dir]; /* just to be safe */
+ if( libstr )
+ gcc_argv[i++] = libstr;
gcc_argv[i++] = lib_path[use_build_dir];
if (!use_build_dir) {
gcc_argv[i++] = usr_lib_path;
@@ -255,4 +273,17 @@
}
return execvp(GCC_BIN, gcc_argv);
+ //no need to free memory from mebcat because we never return...
+}
+
+char * mebcat( char *a, char *b, char *c) {
+ int len = 0;
+ char *ret = NULL;
+
+ len = strlen(a) + strlen(b) + strlen(c) + 1;
+ ret = (char *)calloc( len, sizeof(char) );
+ strncpy(ret, a, len);
+ strncpy(ret + strlen(a), b, len - strlen(a));
+ strncpy(ret + strlen(a) + strlen(b), c, len - strlen(a) - strlen(b));
+ return ret;
}
More information about the uClibc
mailing list