History

configure: Make MSVC version grabbing more robust

When running plain "cl", to get the MSVC version, it prints the version header on stderr, while the usage instructions are printed on stdout. Usually, the version on stderr gets flushed first, so "head -n1" gets the line it expects, but some times (in particular when running MSVC wrapped in wine), it can get the usage line first. Redirect stdout to /dev/null, so we only grab the version among the lines printed to stderr. This should make the version number grabbing more robust. At least all relevant versions of MSVC seem to print this specifically to stderr, not stdout (so we don't risk to miss it); checked down to MSVC 2010.

Martin Storsjö committed 1 year ago

Commit 45a30e01 parent ee1f79b1 file · +4 −1Browse files

Unified · Split

configure+4−1
@@ -5130,7 +5130,10 @@ probe_cc(){ · 5129 unmodified lines
5130 elif $_cc -nologo- 2>&1 | grep -q ^Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then5130 elif $_cc -nologo- 2>&1 | grep -q ^Microsoft || { $_cc -v 2>&1 | grep -q clang && $_cc -? > /dev/null 2>&1; }; then
5131 _type=msvc5131 _type=msvc
5132 if $_cc -nologo- 2>&1 | grep -q ^Microsoft; then5132 if $_cc -nologo- 2>&1 | grep -q ^Microsoft; then
5133 _ident=$($_cc 2>&1 | head -n1 | tr -d '\r')5133 # The version number is printed on the first line on stderr, stdout
5134 # gets the usage instructions. Only include stderr, to avoid
5135 # potential ordering race conditions.
5136 _ident=$($_cc 2>&1 >/dev/null | head -n1 | tr -d '\r')
5134 else5137 else
5135 _ident=$($_cc --version 2>/dev/null | head -n1 | tr -d '\r')5138 _ident=$($_cc --version 2>/dev/null | head -n1 | tr -d '\r')
5136 fi5139 fi

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t