git
/
detect-compiler
58 строк · 1.2 Кб
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
6CC="$*"
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...)
11get_version_line() {
12LANG=C LC_ALL=C $CC -v 2>&1 | grep ' version '
13}
14
15get_family() {
16get_version_line | sed 's/^\(.*\) version [0-9].*/\1/'
17}
18
19get_version() {
20# A string that begins with a digit up to the next SP
21ver=$(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.
25ver=${ver%-win32}
26ver=${ver%-posix}
27
28echo "$ver"
29}
30
31print_flags() {
32family=$1
33version=$(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.
38while test "$version" -gt 0
39do
40echo $family$version
41version=$((version - 1))
42done
43}
44
45case "$(get_family)" in
46gcc)
47print_flags gcc
48;;
49clang | *" clang")
50print_flags clang
51;;
52"Apple LLVM")
53print_flags clang
54;;
55*)
56: unknown compiler family
57;;
58esac
59