RC: Simplify selection of resource compiler based on C/C++ toolchain
Revert the refactoring by commit v2.8.11~105^2~1 (Ninja: use MinGW generator code in EnableLanguage, 2013-03-09) and move the MinGW- specific logic back to the "MinGW Makefiles" generator. Instead teach the platform information modules for GNU and MSVC on Windows to set the preferred RC compiler just before enabling the RC language. This way we choose the RC compiler based on the C/C++ toolchain that is actually enabled.
This commit is contained in:
parent
b3ae0609db
commit
957c2aac7f
|
@ -53,5 +53,9 @@ macro(__cygwin_compiler_gnu lang)
|
|||
set(CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS} -Wl,--enable-auto-import")
|
||||
set(CMAKE_SHARED_MODULE_CREATE_${lang}_FLAGS "${CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS}")
|
||||
|
||||
if(NOT CMAKE_RC_COMPILER_INIT)
|
||||
set(CMAKE_RC_COMPILER_INIT windres)
|
||||
endif()
|
||||
|
||||
enable_language(RC)
|
||||
endmacro()
|
||||
|
|
|
@ -138,6 +138,10 @@ macro(__windows_compiler_gnu lang)
|
|||
endforeach()
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_RC_COMPILER_INIT)
|
||||
set(CMAKE_RC_COMPILER_INIT windres)
|
||||
endif()
|
||||
|
||||
enable_language(RC)
|
||||
endmacro()
|
||||
|
||||
|
|
|
@ -298,6 +298,9 @@ macro(__windows_compiler_msvc lang)
|
|||
set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "/MD /O1 /Ob1 /D NDEBUG")
|
||||
set(CMAKE_${lang}_LINKER_SUPPORTS_PDB ON)
|
||||
|
||||
if(NOT CMAKE_RC_COMPILER_INIT)
|
||||
set(CMAKE_RC_COMPILER_INIT rc)
|
||||
endif()
|
||||
if(NOT CMAKE_RC_FLAGS_INIT)
|
||||
set(CMAKE_RC_FLAGS_INIT "${_PLATFORM_DEFINES} ${_PLATFORM_DEFINES_${lang}}")
|
||||
endif()
|
||||
|
|
|
@ -2420,38 +2420,6 @@ bool cmGlobalGenerator::UseFolderProperty()
|
|||
return false;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void cmGlobalGenerator::EnableMinGWLanguage(cmMakefile *mf)
|
||||
{
|
||||
this->FindMakeProgram(mf);
|
||||
std::string makeProgram = mf->GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
|
||||
std::vector<std::string> locations;
|
||||
locations.push_back(cmSystemTools::GetProgramPath(makeProgram));
|
||||
locations.push_back("/mingw/bin");
|
||||
locations.push_back("c:/mingw/bin");
|
||||
std::string tgcc = cmSystemTools::FindProgram("gcc", locations);
|
||||
std::string gcc = "gcc.exe";
|
||||
if(!tgcc.empty())
|
||||
{
|
||||
gcc = tgcc;
|
||||
}
|
||||
std::string tgxx = cmSystemTools::FindProgram("g++", locations);
|
||||
std::string gxx = "g++.exe";
|
||||
if(!tgxx.empty())
|
||||
{
|
||||
gxx = tgxx;
|
||||
}
|
||||
std::string trc = cmSystemTools::FindProgram("windres", locations);
|
||||
std::string rc = "windres.exe";
|
||||
if(!trc.empty())
|
||||
{
|
||||
rc = trc;
|
||||
}
|
||||
mf->AddDefinition("CMAKE_GENERATOR_CC", gcc.c_str());
|
||||
mf->AddDefinition("CMAKE_GENERATOR_CXX", gxx.c_str());
|
||||
mf->AddDefinition("CMAKE_GENERATOR_RC", rc.c_str());
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
cmTarget cmGlobalGenerator::CreateGlobalTarget(
|
||||
const std::string& name, const char* message,
|
||||
|
|
|
@ -433,7 +433,6 @@ protected:
|
|||
|
||||
virtual const char* GetPredefinedTargetsFolder();
|
||||
virtual bool UseFolderProperty();
|
||||
void EnableMinGWLanguage(cmMakefile *mf);
|
||||
|
||||
private:
|
||||
cmMakefile* TryCompileOuterMakefile;
|
||||
|
|
|
@ -26,7 +26,33 @@ void cmGlobalMinGWMakefileGenerator
|
|||
cmMakefile *mf,
|
||||
bool optional)
|
||||
{
|
||||
this->EnableMinGWLanguage(mf);
|
||||
this->FindMakeProgram(mf);
|
||||
std::string makeProgram = mf->GetRequiredDefinition("CMAKE_MAKE_PROGRAM");
|
||||
std::vector<std::string> locations;
|
||||
locations.push_back(cmSystemTools::GetProgramPath(makeProgram));
|
||||
locations.push_back("/mingw/bin");
|
||||
locations.push_back("c:/mingw/bin");
|
||||
std::string tgcc = cmSystemTools::FindProgram("gcc", locations);
|
||||
std::string gcc = "gcc.exe";
|
||||
if(!tgcc.empty())
|
||||
{
|
||||
gcc = tgcc;
|
||||
}
|
||||
std::string tgxx = cmSystemTools::FindProgram("g++", locations);
|
||||
std::string gxx = "g++.exe";
|
||||
if(!tgxx.empty())
|
||||
{
|
||||
gxx = tgxx;
|
||||
}
|
||||
std::string trc = cmSystemTools::FindProgram("windres", locations);
|
||||
std::string rc = "windres.exe";
|
||||
if(!trc.empty())
|
||||
{
|
||||
rc = trc;
|
||||
}
|
||||
mf->AddDefinition("CMAKE_GENERATOR_CC", gcc.c_str());
|
||||
mf->AddDefinition("CMAKE_GENERATOR_CXX", gxx.c_str());
|
||||
mf->AddDefinition("CMAKE_GENERATOR_RC", rc.c_str());
|
||||
this->cmGlobalUnixMakefileGenerator3::EnableLanguage(l, mf, optional);
|
||||
}
|
||||
|
||||
|
|
|
@ -555,7 +555,6 @@ void cmGlobalNinjaGenerator
|
|||
if (makefile->IsOn("CMAKE_COMPILER_IS_MINGW"))
|
||||
{
|
||||
UsingMinGW = true;
|
||||
this->EnableMinGWLanguage(makefile);
|
||||
}
|
||||
if (std::find(langs.begin(), langs.end(), "Fortran") != langs.end())
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue