Details
-
Bug
-
Resolution: Duplicate
-
P2: Important
-
None
-
5.8.0 Alpha
-
None
Description
Since Qt 5.8 (both 5.8 and dev) the MSVC version detection fails when the environment variable CL is set. It is not unlikely that users have something like
set CL=/MP /FC /nologo
in their environment. The real bad thing is that this goes undetected, resulting a half-baked build: for instance configuring with -opengl dynamic results in an ANGLE-only build etc., presumably because the compiler version is now something bogus or unknown.
Open any MSVC 2015 command prompt.
set CL=/MP /FC /nologo
configure -debug -developer-build -opengl dynamic -nomake examples -nomake tests -opensource -confirm-license
Note the output:
Running configuration tests... Checking for valid makespec... yes Checking for ALSA... no Checking for target architecture... x86_64 Checking for SSE2 instructions... yes Checking for SSE3 instructions... yes Checking for SSSE3 instructions... yes Checking for SSE4.1 instructions... yes Checking for SSE4.2 instructions... yes Checking for AVX instructions... yes Checking for bugfree AVX support in compiler... yes Checking for AVX2 instructions... yes Checking for AVX512 F instructions... no Checking for C++14 support... no Checking for Compiler... MSVC C/C++ COMPILER OPTIONS -OPTIMIZATION- /O1 minimize space /O2 maximize speed /Ob<n> inline expansion (default n=0) /Od disable optimizations (default) /Og enable global optimization /Oi[-] enable intrinsic functions /Os favor code space /Ot favor code speed /Ox maximum optimizations /favor:<blend|AMD64|INTEL64|ATOM> select processor to optimize for, one of: blend - a combination of optimizations for several different x64 processors AMD64 - 64-bit AMD processors INTEL64 - Intel(R)64 architecture processors ATOM - Intel(R) Atom(TM) processors -CODE GENERATION- /Gw[-] separate global variables for linker /GF enable read-only string pooling /Gm[-] enable minimal rebuild /Gy[-] separate functions for linker /GS[-] enable security checks /GR[-] enable C++ RTTI /GX[-] enable C++ EH (same as /EHsc) /guard:cf[-] enable CFG (control flow guard) /EHs enable C++ EH (no SEH exceptions) /EHa enable C++ EH (w/ SEH exceptions) /EHc extern "C" defaults to nothrow /EHr always generate noexcept runtime termination checks /fp:<except[-]|fast|precise|strict> choose floating-point model: except[-] - consider floating-point exceptions when generating code fast - "fast" floating-point model; results are less predictable precise - "precise" floating-point model; results are predictable strict - "strict" floating-point model (implies /fp:except) /Qfast_transcendentals generate inline FP intrinsics even with /fp:except /Qpar[-] enable parallel code generation /Qpar-report:1 auto-parallelizer diagnostic; indicate parallelized loops /Qpar-report:2 auto-parallelizer diagnostic; indicate loops not parallelized /Qvec-report:1 auto-vectorizer diagnostic; indicate vectorized loops /Qvec-report:2 auto-vectorizer diagnostic; indicate loops not vectorized /GL[-] enable link-time code generation /volatile:<iso|ms> choose volatile model: iso - Acquire/release semantics not guaranteed on volatile accesses ms - Acquire/release semantics guaranteed on volatile accesses /GA optimize for Windows Application /Ge force stack checking for all funcs /Gs[num] control stack checking calls /Gh enable _penter function call /GH enable _pexit function call /GT generate fiber-safe TLS accesses /RTC1 Enable fast checks (/RTCsu) /RTCc Convert to smaller type checks /RTCs Stack Frame runtime checking /RTCu Uninitialized local usage checks /clr[:option] compile for common language runtime, where option is: pure - produce IL-only output file (no native executable code) safe - produce IL-only verifiable output file initialAppDomain - enable initial AppDomain behavior of Visual C++ 2002 noAssembly - do not produce an assembly nostdlib - ignore the default \clr directory /homeparams Force parameters passed in registers to be written to the stack /GZ Enable stack checks (/RTCs) /arch:AVX enable use of instructions available with AVX-enabled CPUs /arch:AVX2 enable use of instructions available with AVX2-enabled CPUs /Gv __vectorcall calling convention -OUTPUT FILES- /Fa[file] name assembly listing file /FA[scu] configure assembly listing /Fd[file] name .PDB file /Fe<file> name executable file /Fm[file] name map file /Fo<file> name object file /Fp<file> name precompiled header file /Fr[file] name source browser file /FR[file] name extended .SBR file /Fi[file] name preprocessed file /Fd: <file> name .PDB file /Fe: <file> name executable file /Fm: <file> name map file /Fo: <file> name object file /Fp: <file> name .PCH file /FR: <file> name extended .SBR file /Fi: <file> name preprocessed file /doc[file] process XML documentation comments and optionally name the .xdc file -PREPROCESSOR- /AI<dir> add to assembly search path /FU<file> forced using assembly/module /C don't strip comments /D<name>{=|#}<text> define macro /E preprocess to stdout /EP preprocess to stdout, no #line /P preprocess to file /Fx merge injected code to file /FI<file> name forced include file /U<name> remove predefined macro /u remove all predefined macros /I<dir> add to include search path /X ignore "standard places" -LANGUAGE- /Zi enable debugging information /Z7 enable old-style debug info /Zp[n] pack structs on n-byte boundary /Za disable extensions /Ze enable extensions (default) /Zl omit default library name in .OBJ /Zs syntax check only /vd{0|1|2} disable/enable vtordisp /vm<x> type of pointers to members /Zc:arg1[,arg2] C++ language conformance, where arguments can be: forScope[-] enforce Standard C++ for scoping rules wchar_t[-] wchar_t is the native type, not a typedef auto[-] enforce the new Standard C++ meaning for auto trigraphs[-] enable trigraphs (off by default) rvalueCast[-] enforce Standard C++ explicit type conversion rules strictStrings[-] disable string-literal to [char|wchar_t]* conversion (off by default) implicitNoexcept[-] enable implicit noexcept on required functions threadSafeInit[-] enable thread-safe local static initialization inline[-] remove unreferenced function or data if it is COMDAT or has internal linkage only (off by default) sizedDealloc[-] enable C++14 global sized deallocation functions (on by default) throwingNew[-] assume operator new throws on failure (off by default) referenceBinding[-] a temporary will not bind to an non-const lvalue reference (off by default) /ZH:SHA_256 use SHA256 for file checksum in debug info (experimental) /Zo[-] generate richer debugging information for optimized code (on by default) /ZW enable WinRT language extensions /constexpr:depth<N> use <N> as the recursion depth limit for constexpr (default: 512) /constexpr:backtrace<N> show <N> constexpr evaluations in diagnostics (default: 10) /constexpr:steps<N> terminate constexpr evaluation after <N> steps (default: 100000) /ZI enable Edit and Continue debug info /openmp enable OpenMP 2.0 language extensions -MISCELLANEOUS- @<file> options response file /?, /help print this help message /bigobj generate extended object format /c compile only, no link /errorReport:option Report internal compiler errors to Microsoft none - do not send report prompt - prompt to immediately send report queue - at next admin logon, prompt to send report (default) send - send report automatically /FC use full pathnames in diagnostics /H<num> max external name length /J default char type is unsigned /MP[n] use up to 'n' processes for compilation /nologo suppress copyright message /sdl enable additional security features and warnings /showIncludes show include file names /Tc<source file> compile file as .c /Tp<source file> compile file as .cpp /TC compile all files as .c /TP compile all files as .cpp /V<string> set version string /w disable all warnings /wd<n> disable warning n /we<n> treat warning n as an error /wo<n> issue warning n once /w<l><n> set warning level 1-4 for n /W<n> set warning level (default n=1) /Wall enable all warnings /WL enable one line diagnostics /WX treat warnings as errors /Yc[file] create .PCH file /Yd put debug info in every .OBJ /Yl[sym] inject .PCH ref for debug lib /Yu[file] use .PCH file /Y- disable all PCH options /Zm<n> max memory alloc (% of default) /FS force to use MSPDBSRV.EXE /await enable resumable functions extension /Wv:xx[.yy[.zzzzz]] disable warnings introduced after version xx.yy.zzzzz /source-charset:<iana-name>|.nnnn set source character set /execution-charset:<iana-name>|.nnnn set execution character set /utf-8 set source and execution character set to UTF-8 /validate-charset[-] validate UTF-8 files for only legal characters -LINKING- /LD Create .DLL /LDd Create .DLL debug library /LN Create a .netmodule /F<num> set stack size /link [linker options and libraries] /MD link with MSVCRT.LIB /MT link with LIBCMT.LIB /MDd link with MSVCRTD.LIB debug lib /MTd link with LIBCMTD.LIB debug lib -CODE ANALYSIS- /analyze[-] Enable native analysis /analyze:quiet[-] No warning to console /analyze:log<name> Warnings to file /analyze:autolog Log to *.pftlog /analyze:autolog:ext<ext> Log to *.<ext>/analyze:autolog- No log file /analyze:WX- Warnings not fatal /analyze:stacksize<num> Max stack frame /analyze:max_paths<num> Max paths /analyze:only Analyze, no code gen Checking for compiler defaulting to C++98... yes Checking for D-Bus >= 1.2... no ...
Then it silently goes on, looking fine. But it really isn't.
Attachments
Issue Links
- relates to
-
QTBUG-56388 [Win] configureapp produces invalid QT_CL*_VERSION in qconfig.pri with non-English MSVC output
- Closed