fix #12392: handle CMAKE_CXX_COMPILER_ARG1 for Eclipse projects

CMAKE_CXX/C_COMPILER_ARG1 have to be used for finding the include
dirs and builtin macros, so Eclipse can do code completion

Alex
This commit is contained in:
Alex Neundorf 2011-10-01 19:09:24 +02:00
parent 867b226898
commit 3df49dc7b1
2 changed files with 14 additions and 3 deletions

View File

@ -25,10 +25,12 @@ MACRO(_DETERMINE_GCC_SYSTEM_INCLUDE_DIRS _lang _resultIncludeDirs _resultDefines
IF (${_lang} STREQUAL "c++") IF (${_lang} STREQUAL "c++")
SET(_compilerExecutable "${CMAKE_CXX_COMPILER}") SET(_compilerExecutable "${CMAKE_CXX_COMPILER}")
SET(_arg1 "${CMAKE_CXX_COMPILER_ARG1}")
ELSE () ELSE ()
SET(_compilerExecutable "${CMAKE_C_COMPILER}") SET(_compilerExecutable "${CMAKE_C_COMPILER}")
SET(_arg1 "${CMAKE_C_COMPILER_ARG1}")
ENDIF () ENDIF ()
EXECUTE_PROCESS(COMMAND ${_compilerExecutable} -v -E -x ${_lang} -dD dummy EXECUTE_PROCESS(COMMAND ${_compilerExecutable} ${_arg1} -v -E -x ${_lang} -dD dummy
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/CMakeFiles
ERROR_VARIABLE _gccOutput ERROR_VARIABLE _gccOutput
OUTPUT_VARIABLE _gccStdout ) OUTPUT_VARIABLE _gccStdout )

View File

@ -987,17 +987,26 @@ void cmExtraEclipseCDT4Generator
// we need the "make" and the C (or C++) compiler which are used, Alex // we need the "make" and the C (or C++) compiler which are used, Alex
std::string make = makefile.GetRequiredDefinition("CMAKE_MAKE_PROGRAM"); std::string make = makefile.GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
std::string compiler = makefile.GetSafeDefinition("CMAKE_C_COMPILER"); std::string compiler = makefile.GetSafeDefinition("CMAKE_C_COMPILER");
std::string arg1 = makefile.GetSafeDefinition("CMAKE_C_COMPILER_ARG1");
if (compiler.empty()) if (compiler.empty())
{ {
compiler = makefile.GetSafeDefinition("CMAKE_CXX_COMPILER"); compiler = makefile.GetSafeDefinition("CMAKE_CXX_COMPILER");
arg1 = makefile.GetSafeDefinition("CMAKE_CXX_COMPILER_ARG1");
} }
if (compiler.empty()) //Hmm, what to do now ? if (compiler.empty()) //Hmm, what to do now ?
{ {
compiler = "gcc"; compiler = "gcc";
} }
// the following right now hardcodes gcc behaviour :-/ // the following right now hardcodes gcc behaviour :-/
std::string compilerArgs =
"-E -P -v -dD ${plugin_state_location}/${specs_file}";
if (!arg1.empty())
{
arg1 += " ";
compilerArgs = arg1 + compilerArgs;
}
fout << fout <<
"<storageModule moduleId=\"scannerConfiguration\">\n" "<storageModule moduleId=\"scannerConfiguration\">\n"
"<autodiscovery enabled=\"true\" problemReportingEnabled=\"true\"" "<autodiscovery enabled=\"true\" problemReportingEnabled=\"true\""
@ -1007,7 +1016,7 @@ void cmExtraEclipseCDT4Generator
cmExtraEclipseCDT4Generator::AppendScannerProfile(fout, cmExtraEclipseCDT4Generator::AppendScannerProfile(fout,
"org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile", "org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile",
true, "", true, "specsFile", true, "", true, "specsFile",
"-E -P -v -dD ${plugin_state_location}/${specs_file}", compilerArgs,
compiler, true, true); compiler, true, true);
cmExtraEclipseCDT4Generator::AppendScannerProfile(fout, cmExtraEclipseCDT4Generator::AppendScannerProfile(fout,
"org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile", "org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile",