53 lines
1016 B
53 lines
1016 B
#!/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() { |
|
$CC -v 2>&1 | grep ' version ' |
|
} |
|
|
|
get_family() { |
|
get_version_line | sed 's/^\(.*\) version [0-9][^ ]* .*/\1/' |
|
} |
|
|
|
get_version() { |
|
get_version_line | sed 's/^.* version \([0-9][^ ]*\) .*/\1/' |
|
} |
|
|
|
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) |
|
print_flags clang |
|
;; |
|
"FreeBSD clang") |
|
print_flags clang |
|
;; |
|
"Apple LLVM") |
|
print_flags clang |
|
;; |
|
*) |
|
: unknown compiler family |
|
;; |
|
esac
|
|
|