patch-specs.sh: fallback to ext-toolchain.sh --wrap if spec file patching is not possible (gcc < 4.3.0)
SVN-Revision: 29945
This commit is contained in:
		| @@ -1,7 +1,6 @@ | |||||||
| #!/usr/bin/env bash | #!/usr/bin/env bash | ||||||
|  |  | ||||||
| DIR="$1" | DIR="$1" | ||||||
| FOUND=0 |  | ||||||
|  |  | ||||||
| if [ -d "$DIR" ]; then | if [ -d "$DIR" ]; then | ||||||
| 	DIR="$(cd "$DIR"; pwd)" | 	DIR="$(cd "$DIR"; pwd)" | ||||||
| @@ -26,39 +25,66 @@ if [ ! -x "$CPP" ]; then | |||||||
| 	exit 1 | 	exit 1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
| for lib in $(STAGING_DIR="$dir" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do | patch_specs() { | ||||||
| 	if [ -d "$lib" ]; then | 	local found=0 | ||||||
| 		grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs" |  | ||||||
| 		if [ $FOUND -lt 1 ]; then |  | ||||||
| 			echo -n "Patching specs ... " |  | ||||||
| 			STAGING_DIR="$dir" "$CPP" -dumpspecs | awk ' |  | ||||||
| 				mode ~ "link" { |  | ||||||
| 					sub("%{L.}", "%{L*} -L %:getenv(STAGING_DIR /usr/lib) -rpath-link %:getenv(STAGING_DIR /usr/lib)") |  | ||||||
| 				} |  | ||||||
| 				mode ~ "cpp" { |  | ||||||
| 					$0 = $0 " -idirafter %:getenv(STAGING_DIR /usr/include)" |  | ||||||
| 				} |  | ||||||
| 				{ |  | ||||||
| 					print $0 |  | ||||||
| 					mode = "" |  | ||||||
| 				} |  | ||||||
| 				/^\*cpp:/ { |  | ||||||
| 					mode = "cpp" |  | ||||||
| 				} |  | ||||||
| 				/^\*link.*:/ { |  | ||||||
| 					mode = "link" |  | ||||||
| 				} |  | ||||||
| 			' > "$lib/specs" |  | ||||||
| 			echo "ok" |  | ||||||
| 			FOUND=1 |  | ||||||
| 		fi |  | ||||||
| 	fi |  | ||||||
| done |  | ||||||
|  |  | ||||||
| if [ $FOUND -lt 1 ]; then | 	for lib in $(STAGING_DIR="$DIR" "$CPP" -x c -v /dev/null 2>&1 | sed -ne 's#:# #g; s#^LIBRARY_PATH=##p'); do | ||||||
| 	echo "Failed to locate library directory!" | 		if [ -d "$lib" ]; then | ||||||
| 	exit 1 | 			grep -qs "STAGING_DIR" "$lib/specs" && rm -f "$lib/specs" | ||||||
| else | 			if [ $found -lt 1 ]; then | ||||||
| 	echo "Toolchain successfully patched." | 				echo -n "Patching specs ... " | ||||||
| 	exit 0 | 				STAGING_DIR="$DIR" "$CPP" -dumpspecs | awk ' | ||||||
| fi | 					mode ~ "link" { | ||||||
|  | 						sub("%{L.}", "%{L*} -L %:getenv(STAGING_DIR /usr/lib) -rpath-link %:getenv(STAGING_DIR /usr/lib)") | ||||||
|  | 					} | ||||||
|  | 					mode ~ "cpp" { | ||||||
|  | 						$0 = $0 " -idirafter %:getenv(STAGING_DIR /usr/include)" | ||||||
|  | 					} | ||||||
|  | 					{ | ||||||
|  | 						print $0 | ||||||
|  | 						mode = "" | ||||||
|  | 					} | ||||||
|  | 					/^\*cpp:/ { | ||||||
|  | 						mode = "cpp" | ||||||
|  | 					} | ||||||
|  | 					/^\*link.*:/ { | ||||||
|  | 						mode = "link" | ||||||
|  | 					} | ||||||
|  | 				' > "$lib/specs" | ||||||
|  | 				echo "ok" | ||||||
|  | 				found=1 | ||||||
|  | 			fi | ||||||
|  | 		fi | ||||||
|  | 	done | ||||||
|  |  | ||||||
|  | 	[ $found -gt 0 ] | ||||||
|  | 	return $? | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | VERSION="$(STAGING_DIR="$DIR" "$CPP" --version | head -n1)" | ||||||
|  | VERSION="${VERSION:-unknown}" | ||||||
|  |  | ||||||
|  | case "${VERSION##* }" in | ||||||
|  | 	2.*|3.*|4.0.*|4.1.*|4.2.*) | ||||||
|  | 		echo "The compiler version does not support getenv() in spec files." | ||||||
|  | 		echo -n "Wrapping binaries instead ... " | ||||||
|  |  | ||||||
|  | 		if "${0%/*}/ext-toolchain.sh" --toolchain "$DIR" --wrap "${CPP%/*}"; then | ||||||
|  | 			echo "ok" | ||||||
|  | 			exit 0 | ||||||
|  | 		else | ||||||
|  | 			echo "failed" | ||||||
|  | 			exit $? | ||||||
|  | 		fi | ||||||
|  | 	;; | ||||||
|  | 	*) | ||||||
|  | 		if patch_specs; then | ||||||
|  | 			echo "Toolchain successfully patched." | ||||||
|  | 			exit 0 | ||||||
|  | 		else | ||||||
|  | 			echo "Failed to locate library directory!" | ||||||
|  | 			exit 1 | ||||||
|  | 		fi | ||||||
|  | 	;; | ||||||
|  | esac | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jo-Philipp Wich
					Jo-Philipp Wich