Merge topic 'try_compile-escape-flags'
290857b
try_compile: Escape CMAKE_<lang>_FLAGS in test projects (#14268)
This commit is contained in:
commit
88f4ec0dd5
|
@ -12,6 +12,7 @@
|
||||||
#include "cmCoreTryCompile.h"
|
#include "cmCoreTryCompile.h"
|
||||||
#include "cmake.h"
|
#include "cmake.h"
|
||||||
#include "cmCacheManager.h"
|
#include "cmCacheManager.h"
|
||||||
|
#include "cmLocalGenerator.h"
|
||||||
#include "cmGlobalGenerator.h"
|
#include "cmGlobalGenerator.h"
|
||||||
#include "cmExportTryCompileFileGenerator.h"
|
#include "cmExportTryCompileFileGenerator.h"
|
||||||
#include <cmsys/Directory.hxx>
|
#include <cmsys/Directory.hxx>
|
||||||
|
@ -214,8 +215,8 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Detect languages to enable.
|
// Detect languages to enable.
|
||||||
cmGlobalGenerator* gg =
|
cmLocalGenerator* lg = this->Makefile->GetLocalGenerator();
|
||||||
this->Makefile->GetCMakeInstance()->GetGlobalGenerator();
|
cmGlobalGenerator* gg = lg->GetGlobalGenerator();
|
||||||
std::set<std::string> testLangs;
|
std::set<std::string> testLangs;
|
||||||
for(std::vector<std::string>::iterator si = sources.begin();
|
for(std::vector<std::string>::iterator si = sources.begin();
|
||||||
si != sources.end(); ++si)
|
si != sources.end(); ++si)
|
||||||
|
@ -295,13 +296,12 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
|
||||||
for(std::set<std::string>::iterator li = testLangs.begin();
|
for(std::set<std::string>::iterator li = testLangs.begin();
|
||||||
li != testLangs.end(); ++li)
|
li != testLangs.end(); ++li)
|
||||||
{
|
{
|
||||||
fprintf(fout, "SET(CMAKE_%s_FLAGS \"", li->c_str());
|
|
||||||
std::string langFlags = "CMAKE_" + *li + "_FLAGS";
|
std::string langFlags = "CMAKE_" + *li + "_FLAGS";
|
||||||
if(const char* flags = this->Makefile->GetDefinition(langFlags.c_str()))
|
const char* flags = this->Makefile->GetDefinition(langFlags.c_str());
|
||||||
{
|
fprintf(fout, "SET(CMAKE_%s_FLAGS %s)\n", li->c_str(),
|
||||||
fprintf(fout, " %s ", flags);
|
lg->EscapeForCMake(flags?flags:"").c_str());
|
||||||
}
|
fprintf(fout, "SET(CMAKE_%s_FLAGS \"${CMAKE_%s_FLAGS}"
|
||||||
fprintf(fout, " ${COMPILE_DEFINITIONS}\")\n");
|
" ${COMPILE_DEFINITIONS}\")\n", li->c_str(), li->c_str());
|
||||||
}
|
}
|
||||||
fprintf(fout, "INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES})\n");
|
fprintf(fout, "INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES})\n");
|
||||||
fprintf(fout, "SET(CMAKE_SUPPRESS_REGENERATION 1)\n");
|
fprintf(fout, "SET(CMAKE_SUPPRESS_REGENERATION 1)\n");
|
||||||
|
|
|
@ -89,6 +89,24 @@ if(SHOULD_FAIL)
|
||||||
message(SEND_ERROR "Should fail passed ${TRY_OUT}")
|
message(SEND_ERROR "Should fail passed ${TRY_OUT}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# try to compile a file that should compile
|
||||||
|
set(_c_flags "${CMAKE_C_FLAGS}")
|
||||||
|
if(CMAKE_GENERATOR STREQUAL "Visual Studio 6")
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D \"TESTDEF\"")
|
||||||
|
elseif(WATCOM)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -dTESTDEF")
|
||||||
|
else()
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} \"-DTESTDEF\"")
|
||||||
|
endif()
|
||||||
|
try_compile(SHOULD_PASS
|
||||||
|
${TryCompile_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp
|
||||||
|
${TryCompile_SOURCE_DIR}/testdef.c
|
||||||
|
OUTPUT_VARIABLE TRY_OUT)
|
||||||
|
if(NOT SHOULD_PASS)
|
||||||
|
message(SEND_ERROR "should pass failed ${TRY_OUT}")
|
||||||
|
endif()
|
||||||
|
set(CMAKE_C_FLAGS "${_c_flags}")
|
||||||
|
|
||||||
if(NOT SHOULD_FAIL)
|
if(NOT SHOULD_FAIL)
|
||||||
if(SHOULD_PASS)
|
if(SHOULD_PASS)
|
||||||
message("All Tests passed, ignore all previous output.")
|
message("All Tests passed, ignore all previous output.")
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
#ifndef TESTDEF
|
||||||
|
# error "TESTDEF should be defined!"
|
||||||
|
#endif
|
||||||
|
int main(void) { return 0; }
|
Loading…
Reference in New Issue