git-commit.txt: better description what it does
[git] / detect-compiler
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() {
12         $CC -v 2>&1 | grep ' version '
13 }
14
15 get_family() {
16         get_version_line | sed 's/^\(.*\) version [0-9][^ ]* .*/\1/'
17 }
18
19 get_version() {
20         get_version_line | sed 's/^.* version \([0-9][^ ]*\) .*/\1/'
21 }
22
23 print_flags() {
24         family=$1
25         version=$(get_version | cut -f 1 -d .)
26
27         # Print a feature flag not only for the current version, but also
28         # for any prior versions we encompass. This avoids needing to do
29         # numeric comparisons in make, which are awkward.
30         while test "$version" -gt 0
31         do
32                 echo $family$version
33                 version=$((version - 1))
34         done
35 }
36
37 case "$(get_family)" in
38 gcc)
39         print_flags gcc
40         ;;
41 clang)
42         print_flags clang
43         ;;
44 "FreeBSD clang")
45         print_flags clang
46         ;;
47 "Apple LLVM")
48         print_flags clang
49         ;;
50 *)
51         : unknown compiler family
52         ;;
53 esac