From c3030d7163245b55abfd09eefe696c035c55011c Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Tue, 23 May 2017 11:07:11 +0200 Subject: [PATCH] moc: remove _MSC_EXTENSIONS #define Because we obviously don't support Microsoft's extensions in C++. This is required because some MS headers have code that isn't proper C++, like iso646.h: #if !defined(__cplusplus) || defined(_MSC_EXTENSIONS) #define and && Do not pass /Za to MSVC to generate moc_predefs.h, because this option is incompatible with compiler options like /fp:fast that may be user-specified. This reverts commit e1a70ce4 and re-fixes the issue similarly to commit d72ac3f3. Task-number: QTBUG-58391 Change-Id: I5c0143283afed09f98200806c87259c039c00ae1 Reviewed-by: Friedemann Kleint Reviewed-by: Oswald Buddenhagen Reviewed-by: Olivier Goffart (Woboq GmbH) --- mkspecs/features/moc.prf | 4 ++-- src/tools/moc/main.cpp | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf index 15eb38af31..955933d874 100644 --- a/mkspecs/features/moc.prf +++ b/mkspecs/features/moc.prf @@ -31,10 +31,10 @@ if(gcc|intel_icl|msvc):!rim_qcc:!uikit:!no_moc_predefs:if(!macos|count(QMAKE_APP moc_predefs.name = "Generate moc_predefs.h" moc_predefs.CONFIG = no_link gcc: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -dM -E -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN} - else:intel_icl: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -QdM -P -Za -Fi${QMAKE_FILE_OUT} ${QMAKE_FILE_IN} + else:intel_icl: moc_predefs.commands = $$QMAKE_CXX $$QMAKE_CXXFLAGS -QdM -P -Fi${QMAKE_FILE_OUT} ${QMAKE_FILE_IN} else:msvc { moc_predefs.commands += $$QMAKE_CXX -Bx$$shell_quote($$shell_path($$QMAKE_QMAKE)) $$QMAKE_CXXFLAGS \ - -E -Za ${QMAKE_FILE_IN} 2>NUL >${QMAKE_FILE_OUT} + -E ${QMAKE_FILE_IN} 2>NUL >${QMAKE_FILE_OUT} } else: error("Oops, I messed up") moc_predefs.output = $$MOC_DIR/moc_predefs.h moc_predefs.input = MOC_PREDEF_FILE diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp index b30de66258..25f2fd45bf 100644 --- a/src/tools/moc/main.cpp +++ b/src/tools/moc/main.cpp @@ -380,6 +380,9 @@ int runMoc(int argc, char **argv) error("Missing macro name"); parser.showHelp(1); } + // Prevent parse errors on MSVC extensions. + if (name == "_MSC_EXTENSIONS") + continue; Macro macro; macro.symbols = Preprocessor::tokenize(value, 1, Preprocessor::TokenizeDefine); macro.symbols.removeLast(); // remove the EOF symbol