aboutsummaryrefslogtreecommitdiff
path: root/tools/detect-compiler
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-03-27 11:00:01 -0700
committerJunio C Hamano <gitster@pobox.com>2026-03-27 11:00:01 -0700
commitd1f07dd50087bef18246feffb963d73b23e2cdd6 (patch)
tree818b60e53f48bf6112eb0e834ef63a777f83de6b /tools/detect-compiler
parentebd8fa7e1291e4f82992db763e271ca261dd750b (diff)
parent671df48df895fdf259b48a7f90b70b7c75fc4059 (diff)
downloadgit-d1f07dd50087bef18246feffb963d73b23e2cdd6.tar.xz
Merge branch 'ps/build-tweaks'
Tweak the build infrastructure by moving tools around. * ps/build-tweaks: meson: precompile "git-compat-util.h" meson: compile compatibility sources separately git-compat-util.h: move warning infra to prepare for PCHs builds: move build scripts into "tools/" contrib: move "update-unicode.sh" script into "tools/" contrib: move "coverage-diff.sh" script into "tools/" contrib: move "coccinelle/" directory into "tools/" Introduce new "tools/" directory
Diffstat (limited to 'tools/detect-compiler')
-rwxr-xr-xtools/detect-compiler58
1 files changed, 58 insertions, 0 deletions
diff --git a/tools/detect-compiler b/tools/detect-compiler
new file mode 100755
index 0000000000..124ebdd4c9
--- /dev/null
+++ b/tools/detect-compiler
@@ -0,0 +1,58 @@
+#!/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 | sed -n '/ version /{p;q;}'
+}
+
+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