|  | #!/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 |