You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.2 KiB
58 lines
1.2 KiB
#!/bin/sh |
|
# |
|
# Probe the compiler for vintage, version, etc. This is used for setting |
|
# optional make knobs under the DEVELOPER knob. |
|
|
|
CC="$*" |
|
|
|
# we get something like (this is at least true for gcc and clang) |
|
# |
|
# FreeBSD clang version 3.4.1 (tags/RELEASE...) |
|
get_version_line() { |
|
LANG=C LC_ALL=C $CC -v 2>&1 | grep ' version ' |
|
} |
|
|
|
get_family() { |
|
get_version_line | sed 's/^\(.*\) version [0-9].*/\1/' |
|
} |
|
|
|
get_version() { |
|
# A string that begins with a digit up to the next SP |
|
ver=$(get_version_line | sed 's/^.* version \([0-9][^ ]*\).*/\1/') |
|
|
|
# There are known -variant suffixes that do not affect the |
|
# meaning of the main version number. Strip them. |
|
ver=${ver%-win32} |
|
ver=${ver%-posix} |
|
|
|
echo "$ver" |
|
} |
|
|
|
print_flags() { |
|
family=$1 |
|
version=$(get_version | cut -f 1 -d .) |
|
|
|
# Print a feature flag not only for the current version, but also |
|
# for any prior versions we encompass. This avoids needing to do |
|
# numeric comparisons in make, which are awkward. |
|
while test "$version" -gt 0 |
|
do |
|
echo $family$version |
|
version=$((version - 1)) |
|
done |
|
} |
|
|
|
case "$(get_family)" in |
|
gcc) |
|
print_flags gcc |
|
;; |
|
clang | *" clang") |
|
print_flags clang |
|
;; |
|
"Apple LLVM") |
|
print_flags clang |
|
;; |
|
*) |
|
: unknown compiler family |
|
;; |
|
esac
|
|
|