Skip to content

Commit f8ddd57

Browse files
authored
Merge pull request #29 from tonycoz/clang-vendor
Handle clang --version output with a vendor prefix
2 parents b32b127 + 5e47504 commit f8ddd57

File tree

2 files changed

+56
-1
lines changed

2 files changed

+56
-1
lines changed

lib/ExtUtils/CppGuess.pm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ sub _cc_is_clang {
409409
$self->{is_clang} = 0;
410410
my $cc_version = _capture( "$cc --version" );
411411
if (
412-
$cc_version =~ m/\A(?:clang|apple llvm)/i
412+
$cc_version =~ m/\A(?:(?:\S+ )?clang version|apple llvm)/i
413413
|| $cc eq 'clang' # because why would they lie?
414414
|| (($self->_config->{gccversion} || '') =~ /Clang|Apple LLVM/),
415415
) {

t/002_icpp.t

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,61 @@ my @METHODS = qw(
9595

9696
run_test(@$_) for @DATA;
9797

98+
# mock some compiler output
99+
my $old_capture = \&ExtUtils::CppGuess::_capture;
100+
our $CAPTURES;
101+
{
102+
no warnings "redefine";
103+
*ExtUtils::CppGuess::_capture =
104+
sub {
105+
my @cmd = @_;
106+
if (my $result = $CAPTURES->{"@cmd"}) {
107+
note "Mocking output of @cmd: $result";
108+
return $result;
109+
}
110+
goto &$old_capture;
111+
};
112+
}
113+
my @CAPS =
114+
(
115+
[
116+
{ cc => "cc", config => { ccflags => '' } },
117+
{
118+
is_sunstudio => 0,
119+
is_msvc => undef, is_gcc => undef, is_clang => 1,
120+
compiler_command => 'clang++ -xc++ -Wno-reserved-user-defined-literal',
121+
linker_flags => '-lstdc++',
122+
},
123+
{ "cc --version" => "OpenBSD clang version 10.0.1" },
124+
],
125+
[
126+
{ cc => "clang-15", config => { ccflags => '' } },
127+
{
128+
is_sunstudio => 0,
129+
is_msvc => undef, is_gcc => undef, is_clang => 1,
130+
compiler_command => 'clang++ -xc++ -Wno-reserved-user-defined-literal',
131+
linker_flags => '-lstdc++',
132+
},
133+
{ "clang-15 --version" => "Debian clang version 15.0.7" },
134+
],
135+
[
136+
{ cc => "cc", config => { ccflags => '' } },
137+
{
138+
is_sunstudio => 0,
139+
is_msvc => undef, is_gcc => 1, is_clang => 0,
140+
compiler_command => 'g++ -xc++',
141+
linker_flags => '-lstdc++',
142+
},
143+
{ "cc --version" => "cc (Debian 12.2.0-14) 12.2.0" },
144+
],
145+
);
146+
147+
for my $test (@CAPS) {
148+
my ($args, $expect, $cap) = @$test;
149+
local $CAPTURES = $cap;
150+
run_test($args, $expect);
151+
}
152+
98153
done_testing;
99154

100155
sub run_test {

0 commit comments

Comments
 (0)