]>
Commit | Line | Data |
---|---|---|
1da1580e NTND |
1 | #!/bin/sh |
2 | # | |
3 | # Probe the compiler for vintage, version, etc. This is used for setting | |
4 | # optional make knobs under the DEVELOPER knob. | |
5 | ||
6 | CC="$*" | |
7 | ||
8 | # we get something like (this is at least true for gcc and clang) | |
9 | # | |
10 | # FreeBSD clang version 3.4.1 (tags/RELEASE...) | |
11 | get_version_line() { | |
1fbfd96f | 12 | LANG=C LC_ALL=C $CC -v 2>&1 | grep ' version ' |
1da1580e NTND |
13 | } |
14 | ||
15 | get_family() { | |
33f13ad7 | 16 | get_version_line | sed 's/^\(.*\) version [0-9].*/\1/' |
1da1580e NTND |
17 | } |
18 | ||
19 | get_version() { | |
382a9464 MH |
20 | # A string that begins with a digit up to the next SP |
21 | ver=$(get_version_line | sed 's/^.* version \([0-9][^ ]*\).*/\1/') | |
22 | ||
23 | # There are known -variant suffixes that do not affect the | |
24 | # meaning of the main version number. Strip them. | |
25 | ver=${ver%-win32} | |
26 | ver=${ver%-posix} | |
27 | ||
28 | echo "$ver" | |
1da1580e NTND |
29 | } |
30 | ||
31 | print_flags() { | |
32 | family=$1 | |
33 | version=$(get_version | cut -f 1 -d .) | |
34 | ||
35 | # Print a feature flag not only for the current version, but also | |
36 | # for any prior versions we encompass. This avoids needing to do | |
37 | # numeric comparisons in make, which are awkward. | |
38 | while test "$version" -gt 0 | |
39 | do | |
40 | echo $family$version | |
41 | version=$((version - 1)) | |
42 | done | |
43 | } | |
44 | ||
45 | case "$(get_family)" in | |
46 | gcc) | |
47 | print_flags gcc | |
48 | ;; | |
f32c5d37 | 49 | clang | *" clang") |
1da1580e NTND |
50 | print_flags clang |
51 | ;; | |
f32c5d37 | 52 | "Apple LLVM") |
1da1580e NTND |
53 | print_flags clang |
54 | ;; | |
55 | *) | |
56 | : unknown compiler family | |
57 | ;; | |
58 | esac |