Sync with 'maint'
[git.git] / detect-compiler
bloba87650b71bb095d403993486a7f2af6967be4d55
1 #!/bin/sh
3 # Probe the compiler for vintage, version, etc. This is used for setting
4 # optional make knobs under the DEVELOPER knob.
6 CC="$*"
8 # we get something like (this is at least true for gcc and clang)
10 # FreeBSD clang version 3.4.1 (tags/RELEASE...)
11 get_version_line() {
12 LANG=C LC_ALL=C $CC -v 2>&1 | grep ' version '
15 get_family() {
16 get_version_line | sed 's/^\(.*\) version [0-9].*/\1/'
19 get_version() {
20 # A string that begins with a digit up to the next SP
21 ver=$(get_version_line | sed 's/^.* version \([0-9][^ ]*\).*/\1/')
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}
28 echo "$ver"
31 print_flags() {
32 family=$1
33 version=$(get_version | cut -f 1 -d .)
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
40 echo $family$version
41 version=$((version - 1))
42 done
45 case "$(get_family)" in
46 gcc)
47 print_flags gcc
49 clang | *" clang")
50 print_flags clang
52 "Apple LLVM")
53 print_flags clang
56 : unknown compiler family
58 esac