On Fri, Aug 06, 2021 at 11:11:31AM -0700, Junio C Hamano wrote:
quoted
So maybe we could add another case for "Homebrew clang"?
$ clang --version 2>&1 | sed -ne 's/ version .*//p'
Debian clang
It might be necessary to cope with this "$VENDOR clang version"
convention better with something like the following.
Good catch. Unfortunately your patch below isn't sufficient because
get_family() is broken, too. :(
It insists on there being an extra word after the actual version. There
is for gcc, but not for clang on my system:
$ CC=gcc get_version_line
gcc version 10.2.1 20210110 (Debian 10.2.1-6)
$ CC=clang get_version_line
Debian clang version 11.0.1-2
Doing this on top of your patch makes "./detect-compiler clang" behave
as expected:
diff --git a/detect-compiler b/detect-compiler
index a80442a327..fd388ae783 100755
--- a/detect-compiler
+++ b/detect-compiler
@@ -13,11 +13,11 @@ get_version_line() {
}
get_family() {
- get_version_line | sed 's/^\(.*\) version [0-9][^ ]* .*/\1/'
+ get_version_line | sed 's/^\(.*\) version [0-9].*/\1/'
}
get_version() {
- get_version_line | sed 's/^.* version \([0-9][^ ]*\) .*/\1/'
+ get_version_line | sed 's/^.* version \([0-9][^ ]*\).*/\1/'
}
print_flags() {
I am afraid that this patch is being a bit too aggressive about
LLVM, as I do not know if "$VENDOR LLVM version" is also a thing, or
it is just oddity only at Apple, though.
I think even before this issue, all of the versioning of Apple's clang
is suspect. The "Apple LLVM" bit comes from Eric in:
https://lore.kernel.org/git/20180318090607.GA26226@flurp.local/ (local)
But downthread we realized that the version numbers there don't match
the clang ones:
https://lore.kernel.org/git/CAPig+cRQXQ_DowS2Dsc1x3TAGJjnWig7P4eYS4kQ+C2piAdSWA@mail.gmail.com/ (local)
Duy indicated in the cover letter:
https://lore.kernel.org/git/20180324125348.6614-1-pclouds@gmail.com/ (local)
that the apple support was probably wrong, but it looks like nobody
stepped up in the meantime to fix it. In practice I think it mostly
works anyway because "clang4" is the only version check we have for
clang. So if we err "ahead" a few versions (which is what Apple's
scheme does), you only get bit if you have a pretty old version of
Xcode.
I think if we wanted to get it right, we'd need to encode into the
script some form of the version table here:
https://en.wikipedia.org/wiki/Xcode#Xcode_11.x_-_13.x_%28since_SwiftUI_framework%29
-Peff