git-commit-vandalism/detect-compiler
Jeff King 33f13ad7c5 build: clang version may not be followed by extra words
The get_family and get_version helpers of detect-compiler assume
that the line to identify the version from the compilers have a
token "version", followed by the version number, followed by some
other string, e.g.

  $ CC=gcc get_version_line
  gcc version 10.2.1 20210110 (Debian 10.2.1-6)

But that is not necessarily true, e.g.

  $ CC=clang get_version_line
  Debian clang version 11.0.1-2

Tweak the script not to require extra string after the version.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-08-06 13:30:24 -07:00

54 lines
1023 B
Bash
Executable File

#!/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() {
$CC -v 2>&1 | grep ' version '
}
get_family() {
get_version_line | sed 's/^\(.*\) version [0-9].*/\1/'
}
get_version() {
get_version_line | sed 's/^.* version \([0-9][^ ]*\).*/\1/'
}
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)
print_flags clang
;;
"FreeBSD clang")
print_flags clang
;;
"Apple LLVM"|"Apple clang")
print_flags clang
;;
*)
: unknown compiler family
;;
esac