From c21b5cc34ab2b8f28b914ed9318b4f6f046a5b7b Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Sun, 29 Jan 2012 18:53:12 +0000
Subject: [PATCH] ext-toolchain.sh: rework generated gcc wrapper Only append -L
 and -Wl,-rpath-link flags if the command line contains -l, -L, -shared or
 -static flags; this is needed to suppress "-rpath-link: linker input file
 unused because linking not done" on each cc invocation.

SVN-Revision: 29946
---
 scripts/ext-toolchain.sh | 57 +++++++++++++++++++++++++++++++---------
 1 file changed, 44 insertions(+), 13 deletions(-)

diff --git a/scripts/ext-toolchain.sh b/scripts/ext-toolchain.sh
index 23d14a7483..a34ef06773 100755
--- a/scripts/ext-toolchain.sh
+++ b/scripts/ext-toolchain.sh
@@ -197,6 +197,47 @@ find_bins() {
 }
 
 
+wrap_bin_cc() {
+	local out="$1"
+	local bin="$2"
+
+	echo    '#!/bin/sh'                                                > "$out"
+	echo    'for arg in "$@"; do'                                     >> "$out"
+	echo    ' case "$arg" in -l*|-L*|-shared|-static)'                >> "$out"
+	echo -n '  exec "'"$bin"'" '"$CFLAGS"' ${STAGING_DIR:+'           >> "$out"
+	echo -n '-idirafter "$STAGING_DIR/usr/include" '                  >> "$out"
+	echo -n '-L "$STAGING_DIR/usr/lib" '                              >> "$out"
+	echo    '-Wl,-rpath-link,"$STAGING_DIR/usr/lib"} "$@" ;;'         >> "$out"
+	echo    ' esac'                                                   >> "$out"
+	echo    'done'                                                    >> "$out"
+	echo -n 'exec "'"$bin"'" '"$CFLAGS"' ${STAGING_DIR:+'             >> "$out"
+	echo    '-idirafter "$STAGING_DIR/usr/include"} "$@"'             >> "$out"
+
+	chmod +x "$out"
+}
+
+wrap_bin_ld() {
+	local out="$1"
+	local bin="$2"
+
+	echo    '#!/bin/sh'                                                > "$out"
+	echo -n 'exec "'"$bin"'" '"$CFLAGS"' ${STAGING_DIR:+'             >> "$out"
+	echo -n '-L "$STAGING_DIR/usr/lib" '                              >> "$out"
+	echo    '-rpath-link "$STAGING_DIR/usr/lib"} "$@"'                >> "$out"
+
+	chmod +x "$out"
+}
+
+wrap_bin_other() {
+	local out="$1"
+	local bin="$2"
+
+	echo    '#!/bin/sh'                                                > "$out"
+	echo    'exec "'"$bin"'" "$@"'                                    >> "$out"
+
+	chmod +x "$out"
+}
+
 wrap_bins() {
 	if probe_cc; then
 		mkdir -p "$1" || return 1
@@ -212,27 +253,17 @@ wrap_bins() {
 					bin='$(dirname "$0")/'"${out##*/}"'.bin'
 				fi
 
-				echo '#!/bin/sh' > "$out"
 				case "${cmd##*/}" in
 					*-*cc|*-*cc-*|*-*++|*-*++-*|*-cpp)
-						echo -n 'exec "'"$bin"'" '"$CFLAGS"' '         >> "$out"
-						echo -n '${STAGING_DIR:+-idirafter '           >> "$out"
-						echo -n '"$STAGING_DIR/usr/include" '          >> "$out"
-						echo -n '-L "$STAGING_DIR/usr/lib" '           >> "$out"
-						echo -n '-Wl,-rpath-link,'                     >> "$out"
-						echo    '"$STAGING_DIR/usr/lib"} "$@"'         >> "$out"
+						wrap_bin_cc "$out" "$bin"
 					;;
 					*-ld)
-						echo -n 'exec "'"$bin"'" ${STAGING_DIR:+'      >> "$out"
-						echo -n '-L "$STAGING_DIR/usr/lib" '           >> "$out"
-						echo -n '-rpath-link '                         >> "$out"
-						echo    '"$STAGING_DIR/usr/lib"} "$@"'         >> "$out"
+						wrap_bin_ld "$out" "$bin"
 					;;
 					*)
-						echo    'exec "'"$bin"'" "$@"'                 >> "$out"
+						wrap_bin_other "$out" "$bin"
 					;;
 				esac
-				chmod +x "$out"
 			fi
 		done
 
-- 
GitLab