diff --git a/bin/smartlink b/bin/smartlink index 52e756cd44ec3ec01c47631e2c588c0ee629b246..b7124d8e7fb4c1beda6d5b6fe14a49e47893726d 100755 --- a/bin/smartlink +++ b/bin/smartlink @@ -21,6 +21,15 @@ export SGI_API SET_N32="" +case "/$LINKER " in + */ld\ *) + LINKER_IS_LD=yes + ;; + *) + LINKER_IS_LD=no + ;; +esac + while test "$#" != 0; do case $1 in -R*) @@ -57,6 +66,17 @@ while test "$#" != 0; do -n32) SET_N32="-n32" ;; + + + -Wl,*) + # Strip '-Wl,' if the linker is ld + + if test $LINKER_IS_LD = yes; then + LDOPTS="$LDOPTS `echo $1|sed -e 's/^-Wl,//'`" + else + LDOPTS="$LDOPTS $1" + fi + ;; *) LDOPTS="$LDOPTS $1" esac diff --git a/src/smartlink.c b/src/smartlink.c index 551a5484baf2af22997becc37c7c207017061748..5fbd6f05d616d622c4b20bdd3d903b7fda1fea94 100644 --- a/src/smartlink.c +++ b/src/smartlink.c @@ -1,5 +1,5 @@ /* - * $Id: smartlink.c,v 1.4 2000/01/30 17:13:28 grubba Exp $ + * $Id: smartlink.c,v 1.5 2000/02/20 00:08:47 hubbe Exp $ * * smartlink - A smarter linker. * Based on the /bin/sh script smartlink 1.23. @@ -87,7 +87,7 @@ int main(int argc, char **argv) if (!strcmp(argv[1], "-v")) { fprintf(stdout, - "$Id: smartlink.c,v 1.4 2000/01/30 17:13:28 grubba Exp $\n" + "$Id: smartlink.c,v 1.5 2000/02/20 00:08:47 hubbe Exp $\n" "Usage:\n" "\t%s binary [args]\n", argv[0]); @@ -200,6 +200,27 @@ int main(int argc, char **argv) new_argv[new_argc++] = argv[i]; } +#ifndef USE_Wl + /* This code strips '-Wl,' from arguments if the + * linker is '*ld' + */ + if(linking) + { + int len=strlen(argv[1]); + if(strchr(argv[1],' ')) len=strchr(argv[1],' ') - argv[1]; + if(len > 1 && argv[1][len-2]=='l' && argv[1][len-1]=='d') + { + for(i=2; i<argc; i++) { + if (new_argv[i][0] == '-' && new_argv[i][1]=='W' && + new_argv[i][2]=='l' && new_argv[i][3]==',') + { + new_argv[i]=new_argv[i]+4; + } + } + } + } +#endif + if (n32) { i = new_argc++; /* Note don't copy index 0 */