summaryrefslogtreecommitdiff
blob: f3439afa076a36fa228a9dd8a42a3e526e6e04f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env bash

link_dirs=()
opts=()
chost="@GENTOO_PORTAGE_CHOST@"
prefix="@GENTOO_PORTAGE_EPREFIX@"
absprefix=${prefix}
if [[ ${CHOST} == *"-winnt"* ]]; then
    # we may get called from windows binary, like pkgdata in dev-libs/icu
    # in this case, PATH elements get the "/dev/fs/C/WINDOWS/SUA" prefix
    absprefix=$(winpath2unix "$(unixpath2win "${absprefix}")")
fi
mode=link
orig_args=("$@")

for opt in "$@"; do
 case "$opt" in
  -L)	link_dirs=("${link_dirs[@]}" "-L$1"); shift ;;
  -L*)	link_dirs=("${link_dirs[@]}" "${opt}") ;;
  *)
  	case "${opt}" in
	-v)	
		# -v done right: only use mode version if -v is the _only_
		# argument on the command line.
		[[ ${#orig_args[@]} -gt 1 ]] || mode=version
		;;
	--version)	mode=version ;;
	-c|-E|-S)	mode=compile ;;
	-print-search-dirs) mode=dirs ;;
	esac
  	opts=("${opts[@]}" "${opt}")
	;;
 esac
done

save_ifs=$IFS
IFS=':'
new_path=
for p in $PATH; do
 IFS=$save_ifs
 [[ "${p#${absprefix}}" != "${p}" ]] && continue
 if [[ -z "${new_path}" ]]; then
  new_path="${p}"
 else
  new_path="${new_path}:${p}"
 fi
done
IFS=$save_ifs

PATH=${new_path}

# toolchain-prefix-wrapper's ld-wrapper understands '-R' for aix and hpux too.
# parity (winnt) understands -rpath only ...
case "${chost}" in
*-winnt*) rpath_opt="-Wl,-rpath," ;;
*) rpath_opt="-Wl,-R," ;;
esac

pfx_link=("-L${prefix}/usr/lib" "-L${prefix}/lib")
pfx_link_r=("${rpath_opt}${prefix}/lib" "${rpath_opt}${prefix}/usr/lib")
pfx_comp=("-I${prefix}/include" "-I${prefix}/usr/include")

case "$mode" in
link)      exec "$(basename $0)" "${link_dirs[@]}" "${pfx_link[@]}" "${opts[@]}" "${pfx_comp[@]}" "${pfx_link_r[@]}" ;;
compile)	exec "$(basename $0)" "${link_dirs[@]}" "${opts[@]}" "${pfx_comp[@]}" ;;
version)	exec "$(basename $0)" "${orig_args[@]}" ;;
dirs)
	"$(basename $0)" "${orig_args[@]}" | while read line; do
		if [[ "${line}" == "libraries: ="* ]]; then
			echo "libraries: =${prefix}/usr/lib:${prefix}/lib:${line#"libraries: ="}"
		else
			echo "${line}"
		fi
	done
	;;
*)			echo "cannot infer $0's mode from comamnd line arguments"; exit 1 ;;
esac