diff options
29 files changed, 255 insertions, 22 deletions
diff --git a/Help/command/try_compile.rst b/Help/command/try_compile.rst index 28dae80..78b1bc7 100644 --- a/Help/command/try_compile.rst +++ b/Help/command/try_compile.rst @@ -112,3 +112,6 @@ The current setting of :policy:`CMP0065` is set in the generated project. Set the :variable:`CMAKE_TRY_COMPILE_CONFIGURATION` variable to choose a build configuration. + +Set the :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable to specify +the type of target used for the source file signature. diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 15eaece..444a706 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/Help/manual/cmake-variables.7.rst @@ -292,6 +292,7 @@ Variables that Control the Build /variable/CMAKE_STATIC_LINKER_FLAGS_CONFIG /variable/CMAKE_STATIC_LINKER_FLAGS /variable/CMAKE_TRY_COMPILE_CONFIGURATION + /variable/CMAKE_TRY_COMPILE_TARGET_TYPE /variable/CMAKE_USE_RELATIVE_PATHS /variable/CMAKE_VISIBILITY_INLINES_HIDDEN /variable/CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD diff --git a/Help/release/dev/try_compile-target-type.rst b/Help/release/dev/try_compile-target-type.rst new file mode 100644 index 0000000..cc41bf3 --- /dev/null +++ b/Help/release/dev/try_compile-target-type.rst @@ -0,0 +1,8 @@ +try_compile-target-type +----------------------- + +* The :command:`try_compile` command learned to check a new + :variable:`CMAKE_TRY_COMPILE_TARGET_TYPE` variable to optionally + build a static library instead of an executable. This is useful + for cross-compiling toolchains that cannot link binaries without + custom flags or scripts. diff --git a/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst b/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst new file mode 100644 index 0000000..5fa8dfc --- /dev/null +++ b/Help/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.rst @@ -0,0 +1,15 @@ +CMAKE_TRY_COMPILE_TARGET_TYPE +----------------------------- + +Type of target generated for :command:`try_compile` calls using the +source file signature. Valid values are: + +``EXECUTABLE`` + Use :command:`add_executable` to name the source file in the + generated project. This is the default if no value is given. + +``STATIC_LIBRARY`` + Use :command:`add_library` with the ``STATIC`` option to name the + source file in the generated project. This avoids running the + linker and is intended for use with cross-compiling toolchains + that cannot link without custom flags or linker scripts. diff --git a/Modules/CMakeFindEclipseCDT4.cmake b/Modules/CMakeFindEclipseCDT4.cmake index 85c1fdf..5bf738a 100644 --- a/Modules/CMakeFindEclipseCDT4.cmake +++ b/Modules/CMakeFindEclipseCDT4.cmake @@ -30,6 +30,8 @@ function(_FIND_ECLIPSE_VERSION) set(_ECLIPSE_VERSION_NAME_3.7 "Indigo" ) set(_ECLIPSE_VERSION_NAME_4.2 "Juno" ) set(_ECLIPSE_VERSION_NAME_4.3 "Kepler" ) + set(_ECLIPSE_VERSION_NAME_4.4 "Luna" ) + set(_ECLIPSE_VERSION_NAME_4.5 "Mars" ) if(NOT DEFINED CMAKE_ECLIPSE_VERSION) if(CMAKE_ECLIPSE_EXECUTABLE) @@ -65,6 +67,8 @@ function(_FIND_ECLIPSE_VERSION) "3.7 (${_ECLIPSE_VERSION_NAME_3.7})" "4.2 (${_ECLIPSE_VERSION_NAME_4.2})" "4.3 (${_ECLIPSE_VERSION_NAME_4.3})" + "4.4 (${_ECLIPSE_VERSION_NAME_4.4})" + "4.5 (${_ECLIPSE_VERSION_NAME_4.5})" ) endfunction() diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 2094bf2..c307854 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,5 +1,5 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 5) -set(CMake_VERSION_PATCH 20160225) +set(CMake_VERSION_PATCH 20160226) #set(CMake_VERSION_RC 1) diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx index 2c2cd48..fd62696 100644 --- a/Source/CTest/cmCTestCoverageHandler.cxx +++ b/Source/CTest/cmCTestCoverageHandler.cxx @@ -983,7 +983,7 @@ int cmCTestCoverageHandler::HandleDelphiCoverage( std::string BinDir = this->CTest->GetBinaryDir(); - std::string coverageFile = BinDir+ "/*.html"; + std::string coverageFile = BinDir+ "/*(*.pas).html"; g.FindFiles(coverageFile); @@ -1017,9 +1017,25 @@ int cmCTestCoverageHandler::HandleBlanketJSCoverage( std::string coverageFile = SourceDir+ "/*.json"; cmsys::Glob g; std::vector<std::string> files; + std::vector<std::string> blanketFiles; g.FindFiles(coverageFile); files=g.GetFiles(); - if (!files.empty()) + // Ensure that the JSON files found are the result of the + // Blanket.js output. Check for the "node-jscoverage" + // string on the second line + std::string line; + for(unsigned int fileEntry=0;fileEntry<files.size();fileEntry++) + { + cmsys::ifstream in(files[fileEntry].c_str()); + cmSystemTools::GetLineFromStream(in, line); + cmSystemTools::GetLineFromStream(in, line); + if (line.find("node-jscoverage") != line.npos) + { + blanketFiles.push_back(files[fileEntry]); + } + } + // Take all files with the node-jscoverage string and parse those + if (!blanketFiles.empty()) { cmCTestOptionalLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "Found BlanketJS output JSON, Performing Coverage" << std::endl, diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx index 4a1f770..b639c15 100644 --- a/Source/cmCoreTryCompile.cxx +++ b/Source/cmCoreTryCompile.cxx @@ -19,13 +19,42 @@ #include <assert.h> -int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) +int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv, + bool isTryRun) { this->BinaryDirectory = argv[1].c_str(); this->OutputFile = ""; // which signature were we called with ? this->SrcFileSignature = true; + cmState::TargetType targetType = cmState::EXECUTABLE; + const char* tt = + this->Makefile->GetDefinition("CMAKE_TRY_COMPILE_TARGET_TYPE"); + if (!isTryRun && tt && *tt) + { + if (strcmp(tt, cmState::GetTargetTypeName(cmState::EXECUTABLE)) == 0) + { + targetType = cmState::EXECUTABLE; + } + else if (strcmp(tt, + cmState::GetTargetTypeName(cmState::STATIC_LIBRARY)) == 0) + { + targetType = cmState::STATIC_LIBRARY; + } + else + { + this->Makefile->IssueMessage( + cmake::FATAL_ERROR, + std::string("Invalid value '") + tt + "' for " + "CMAKE_TRY_COMPILE_TARGET_TYPE. Only " + "'" + cmState::GetTargetTypeName(cmState::EXECUTABLE) + "' and " + "'" + cmState::GetTargetTypeName(cmState::STATIC_LIBRARY) + "' " + "are allowed." + ); + return -1; + } + } + const char* sourceDirectory = argv[2].c_str(); const char* projectName = 0; std::string targetName; @@ -486,11 +515,22 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) fprintf(fout, "set(CMAKE_ENABLE_EXPORTS %s)\n", ee); } - /* Put the executable at a known location (for COPY_FILE). */ - fprintf(fout, "set(CMAKE_RUNTIME_OUTPUT_DIRECTORY \"%s\")\n", - this->BinaryDirectory.c_str()); - /* Create the actual executable. */ - fprintf(fout, "add_executable(%s", targetName.c_str()); + if (targetType == cmState::EXECUTABLE) + { + /* Put the executable at a known location (for COPY_FILE). */ + fprintf(fout, "set(CMAKE_RUNTIME_OUTPUT_DIRECTORY \"%s\")\n", + this->BinaryDirectory.c_str()); + /* Create the actual executable. */ + fprintf(fout, "add_executable(%s", targetName.c_str()); + } + else // if (targetType == cmState::STATIC_LIBRARY) + { + /* Put the static library at a known location (for COPY_FILE). */ + fprintf(fout, "set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY \"%s\")\n", + this->BinaryDirectory.c_str()); + /* Create the actual static library. */ + fprintf(fout, "add_library(%s STATIC", targetName.c_str()); + } for(std::vector<std::string>::iterator si = sources.begin(); si != sources.end(); ++si) { @@ -549,7 +589,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv) if (this->SrcFileSignature) { std::string copyFileErrorMessage; - this->FindOutputFile(targetName); + this->FindOutputFile(targetName, targetType); if ((res==0) && !copyFile.empty()) { @@ -651,13 +691,26 @@ void cmCoreTryCompile::CleanupFiles(const char* binDir) } } -void cmCoreTryCompile::FindOutputFile(const std::string& targetName) +void cmCoreTryCompile::FindOutputFile(const std::string& targetName, + cmState::TargetType targetType) { this->FindErrorMessage = ""; this->OutputFile = ""; std::string tmpOutputFile = "/"; - tmpOutputFile += targetName; - tmpOutputFile +=this->Makefile->GetSafeDefinition("CMAKE_EXECUTABLE_SUFFIX"); + if (targetType == cmState::EXECUTABLE) + { + tmpOutputFile += targetName; + tmpOutputFile += + this->Makefile->GetSafeDefinition("CMAKE_EXECUTABLE_SUFFIX"); + } + else // if (targetType == cmState::STATIC_LIBRARY) + { + tmpOutputFile += + this->Makefile->GetSafeDefinition("CMAKE_STATIC_LIBRARY_PREFIX"); + tmpOutputFile += targetName; + tmpOutputFile += + this->Makefile->GetSafeDefinition("CMAKE_STATIC_LIBRARY_SUFFIX"); + } // a list of directories where to search for the compilation result // at first directly in the binary dir diff --git a/Source/cmCoreTryCompile.h b/Source/cmCoreTryCompile.h index 3272462..c2beea8 100644 --- a/Source/cmCoreTryCompile.h +++ b/Source/cmCoreTryCompile.h @@ -30,7 +30,7 @@ public: * commands, such as TryRun can access the same logic without * duplication. */ - int TryCompileCode(std::vector<std::string> const& argv); + int TryCompileCode(std::vector<std::string> const& argv, bool isTryRun); /** * This deletes all the files created by TryCompileCode. @@ -44,8 +44,8 @@ public: TryCompileCode. The result is stored in OutputFile. If nothing is found, the error message is stored in FindErrorMessage. */ - void FindOutputFile(const std::string& targetName); - + void FindOutputFile(const std::string& targetName, + cmState::TargetType targetType); cmTypeMacro(cmCoreTryCompile, cmCommand); diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx index aedf6f4..133a85a 100644 --- a/Source/cmExtraEclipseCDT4Generator.cxx +++ b/Source/cmExtraEclipseCDT4Generator.cxx @@ -42,6 +42,8 @@ cmExtraEclipseCDT4Generator this->GenerateLinkedResources = true; this->SupportsGmakeErrorParser = true; this->SupportsMachO64Parser = true; + this->CEnabled = false; + this->CXXEnabled = false; } //---------------------------------------------------------------------------- @@ -64,10 +66,12 @@ void cmExtraEclipseCDT4Generator { this->Natures.insert("org.eclipse.cdt.core.ccnature"); this->Natures.insert("org.eclipse.cdt.core.cnature"); + this->CXXEnabled = true; } else if (*lit == "C") { this->Natures.insert("org.eclipse.cdt.core.cnature"); + this->CEnabled = true; } else if (*lit == "Java") { @@ -890,7 +894,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const // add system defined c macros const char* cDefs=mf->GetDefinition( "CMAKE_EXTRA_GENERATOR_C_SYSTEM_DEFINED_MACROS"); - if(cDefs) + if(this->CEnabled && cDefs) { // Expand the list. std::vector<std::string> defs; @@ -925,7 +929,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const // add system defined c++ macros const char* cxxDefs = mf->GetDefinition( "CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_DEFINED_MACROS"); - if(cxxDefs) + if(this->CXXEnabled && cxxDefs) { // Expand the list. std::vector<std::string> defs; @@ -979,7 +983,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const // CMakeSystemSpecificInformation.cmake. This makes Eclipse find the // standard headers. std::string compiler = mf->GetSafeDefinition("CMAKE_C_COMPILER"); - if (!compiler.empty()) + if (this->CEnabled && !compiler.empty()) { std::string systemIncludeDirs = mf->GetSafeDefinition( "CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS"); @@ -988,7 +992,7 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const this->AppendIncludeDirectories(fout, dirs, emmited); } compiler = mf->GetSafeDefinition("CMAKE_CXX_COMPILER"); - if (!compiler.empty()) + if (this->CXXEnabled && !compiler.empty()) { std::string systemIncludeDirs = mf->GetSafeDefinition( "CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS"); diff --git a/Source/cmExtraEclipseCDT4Generator.h b/Source/cmExtraEclipseCDT4Generator.h index 16675f2..1da2077 100644 --- a/Source/cmExtraEclipseCDT4Generator.h +++ b/Source/cmExtraEclipseCDT4Generator.h @@ -116,6 +116,8 @@ private: bool SupportsVirtualFolders; bool SupportsGmakeErrorParser; bool SupportsMachO64Parser; + bool CEnabled; + bool CXXEnabled; }; diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index b3557f9..1fa27eb 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -3300,6 +3300,15 @@ cmFileCommand::HandleDownloadCommand(std::vector<std::string> const& args) << " status: [" << (int)res << ";\"" << ::curl_easy_strerror(res) << "\"]" << std::endl ; + + if(!statusVar.empty() && res == 0) + { + std::string status = "1;HASH mismatch: " + "expected: " + expectedHash + + " actual: " + actualHash; + this->Makefile->AddDefinition(statusVar, status.c_str()); + } + this->SetError(oss.str()); return false; } diff --git a/Source/cmTryCompileCommand.cxx b/Source/cmTryCompileCommand.cxx index 12ce015..87fbbdf 100644 --- a/Source/cmTryCompileCommand.cxx +++ b/Source/cmTryCompileCommand.cxx @@ -28,7 +28,7 @@ bool cmTryCompileCommand return false; } - this->TryCompileCode(argv); + this->TryCompileCode(argv, false); // if They specified clean then we clean up what we can if (this->SrcFileSignature) diff --git a/Source/cmTryRunCommand.cxx b/Source/cmTryRunCommand.cxx index b9ffe5e..d4a36c9 100644 --- a/Source/cmTryRunCommand.cxx +++ b/Source/cmTryRunCommand.cxx @@ -135,7 +135,7 @@ bool cmTryRunCommand this->CompileResultVariable = argv[1]; // do the try compile - int res = this->TryCompileCode(tryCompile); + int res = this->TryCompileCode(tryCompile, true); // now try running the command if it compiled if (!res) diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index 09d4a90..a664442 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -2698,6 +2698,33 @@ cmVisualStudio10TargetGenerator::ComputeLinkOptions(std::string const& config) } } + // Hack to fix flag version selection in a common use case. + // FIXME: Select flag table based on toolset instead of VS version. + if (this->LocalGenerator->GetVersion() >= + cmGlobalVisualStudioGenerator::VS14) + { + cmGlobalVisualStudio10Generator* gg = + static_cast<cmGlobalVisualStudio10Generator*>(this->GlobalGenerator); + const char* toolset = gg->GetPlatformToolset(); + if (toolset && + (cmHasLiteralPrefix(toolset, "v110") || + cmHasLiteralPrefix(toolset, "v120"))) + { + if (const char* debug = linkOptions.GetFlag("GenerateDebugInformation")) + { + // Convert value from enumeration back to boolean for older toolsets. + if (strcmp(debug, "No") == 0) + { + linkOptions.AddFlag("GenerateDebugInformation", "false"); + } + else if (strcmp(debug, "Debug") == 0) + { + linkOptions.AddFlag("GenerateDebugInformation", "true"); + } + } + } + } + this->LinkOptions[config] = pOptions.release(); return true; } diff --git a/Tests/RunCMake/cmake_parse_arguments/CornerCases.cmake b/Tests/RunCMake/cmake_parse_arguments/CornerCases.cmake index 72c82ab..028bfaf 100644 --- a/Tests/RunCMake/cmake_parse_arguments/CornerCases.cmake +++ b/Tests/RunCMake/cmake_parse_arguments/CornerCases.cmake @@ -29,6 +29,26 @@ macro(foo) endmacro() foo(FOO foo) +TEST(_FOO1_FOO foo) +TEST(_FOO2_FOO foo) +# Make sure a list is split +foo(FOO "foo;bar") TEST(_FOO1_FOO foo) +TEST(_FOO1_UNPARSED_ARGUMENTS "bar") TEST(_FOO2_FOO foo) +TEST(_FOO2_UNPARSED_ARGUMENTS "bar") + +# Do not split if argn is quoted +foo(FOO "foo\\;bar") +TEST(_FOO1_FOO foo) +TEST(_FOO1_UNPARSED_ARGUMENTS "bar") +TEST(_FOO2_FOO foo;bar) +TEST(_FOO2_UNPARSED_ARGUMENTS "UNDEFINED") + +# Do not split if argn is quoted +foo(FOO "foo\\\\;bar") +TEST(_FOO1_FOO foo) +TEST(_FOO1_UNPARSED_ARGUMENTS "bar") +TEST(_FOO2_FOO foo;bar) +TEST(_FOO2_UNPARSED_ARGUMENTS "UNDEFINED") diff --git a/Tests/RunCMake/cmake_parse_arguments/Initialization.cmake b/Tests/RunCMake/cmake_parse_arguments/Initialization.cmake index 462f923..b4199ea 100644 --- a/Tests/RunCMake/cmake_parse_arguments/Initialization.cmake +++ b/Tests/RunCMake/cmake_parse_arguments/Initialization.cmake @@ -25,6 +25,9 @@ TEST(pref_OPT1 TRUE) cmake_parse_arguments(pref "OPT1;OPT2" "" "" OPT1 OPT2) TEST(pref_OPT1 TRUE) TEST(pref_OPT2 TRUE) +cmake_parse_arguments(pref "OPT1;OPT2" "" "" "OPT1;OPT2") +TEST(pref_OPT1 TRUE) +TEST(pref_OPT2 TRUE) cmake_parse_arguments(pref "OPT1;OPT2" "" "") TEST(pref_OPT1 FALSE) TEST(pref_OPT2 FALSE) @@ -44,6 +47,9 @@ TEST(pref_SINGLE1 foo) cmake_parse_arguments(pref "" "SINGLE1;SINGLE2" "" SINGLE1 foo SINGLE2 bar) TEST(pref_SINGLE1 foo) TEST(pref_SINGLE2 bar) +cmake_parse_arguments(pref "" "SINGLE1;SINGLE2" "" "SINGLE1;foo;SINGLE2;bar") +TEST(pref_SINGLE1 foo) +TEST(pref_SINGLE2 bar) cmake_parse_arguments(pref "" "SINGLE1;SINGLE2" "") TEST(pref_SINGLE1 UNDEFINED) TEST(pref_SINGLE2 UNDEFINED) @@ -63,6 +69,9 @@ TEST(pref_MULTI1 foo) cmake_parse_arguments(pref "" "" "MULTI1;MULTI2" MULTI1 foo bar MULTI2 bar foo) TEST(pref_MULTI1 foo bar) TEST(pref_MULTI2 bar foo) +cmake_parse_arguments(pref "" "" "MULTI1;MULTI2" "MULTI1;foo;bar;MULTI2;bar;foo") +TEST(pref_MULTI1 foo bar) +TEST(pref_MULTI2 bar foo) cmake_parse_arguments(pref "" "" "MULTI1;MULTI2") TEST(pref_MULTI1 UNDEFINED) TEST(pref_MULTI2 UNDEFINED) diff --git a/Tests/RunCMake/file/DOWNLOAD-hash-mismatch-result.txt b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/file/DOWNLOAD-hash-mismatch-stderr.txt b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch-stderr.txt new file mode 100644 index 0000000..406e315 --- /dev/null +++ b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch-stderr.txt @@ -0,0 +1,12 @@ +^CMake Error at DOWNLOAD-hash-mismatch.cmake:[0-9]+ \(file\): + file DOWNLOAD HASH mismatch + + for file: \[.*/Tests/RunCMake/file/DOWNLOAD-hash-mismatch-build/hash-mismatch.txt\] + expected hash: \[0123456789abcdef0123456789abcdef01234567\] + actual hash: \[da39a3ee5e6b4b0d3255bfef95601890afd80709\] + status: \[0;"No error"\] + +Call Stack \(most recent call first\): + CMakeLists.txt:[0-9]+ \(include\) ++ +status='1;HASH mismatch: expected: 0123456789abcdef0123456789abcdef01234567 actual: da39a3ee5e6b4b0d3255bfef95601890afd80709'$ diff --git a/Tests/RunCMake/file/DOWNLOAD-hash-mismatch.cmake b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch.cmake new file mode 100644 index 0000000..ca72692 --- /dev/null +++ b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch.cmake @@ -0,0 +1,7 @@ +file(DOWNLOAD + "file://${CMAKE_CURRENT_SOURCE_DIR}/DOWNLOAD-hash-mismatch.txt" + ${CMAKE_CURRENT_BINARY_DIR}/hash-mismatch.txt + EXPECTED_HASH SHA1=0123456789abcdef0123456789abcdef01234567 + STATUS status + ) +message("status='${status}'") diff --git a/Tests/RunCMake/file/DOWNLOAD-hash-mismatch.txt b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch.txt new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Tests/RunCMake/file/DOWNLOAD-hash-mismatch.txt diff --git a/Tests/RunCMake/file/RunCMakeTest.cmake b/Tests/RunCMake/file/RunCMakeTest.cmake index d3dfb1b..5f85bba 100644 --- a/Tests/RunCMake/file/RunCMakeTest.cmake +++ b/Tests/RunCMake/file/RunCMakeTest.cmake @@ -1,5 +1,6 @@ include(RunCMake) +run_cmake(DOWNLOAD-hash-mismatch) run_cmake(INSTALL-DIRECTORY) run_cmake(INSTALL-MESSAGE-bad) run_cmake(FileOpenFailRead) diff --git a/Tests/RunCMake/try_compile/RunCMakeTest.cmake b/Tests/RunCMake/try_compile/RunCMakeTest.cmake index 6cdbafa..43ce998 100644 --- a/Tests/RunCMake/try_compile/RunCMakeTest.cmake +++ b/Tests/RunCMake/try_compile/RunCMakeTest.cmake @@ -16,6 +16,10 @@ run_cmake(BadSources2) run_cmake(NonSourceCopyFile) run_cmake(NonSourceCompileDefinitions) +run_cmake(TargetTypeExe) +run_cmake(TargetTypeInvalid) +run_cmake(TargetTypeStatic) + run_cmake(CMP0056) if(RunCMake_GENERATOR MATCHES "Make|Ninja") diff --git a/Tests/RunCMake/try_compile/TargetTypeExe.cmake b/Tests/RunCMake/try_compile/TargetTypeExe.cmake new file mode 100644 index 0000000..9b6e727 --- /dev/null +++ b/Tests/RunCMake/try_compile/TargetTypeExe.cmake @@ -0,0 +1,14 @@ +enable_language(C) +set(CMAKE_TRY_COMPILE_TARGET_TYPE EXECUTABLE) +try_compile(result ${CMAKE_CURRENT_BINARY_DIR} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/src.c + OUTPUT_VARIABLE out + COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/copy + COPY_FILE_ERROR copy_err + ) +if(NOT result) + message(FATAL_ERROR "try_compile failed:\n${out}") +endif() +if(copy_err) + message(FATAL_ERROR "try_compile COPY_FILE failed:\n${copy_err}") +endif() diff --git a/Tests/RunCMake/try_compile/TargetTypeInvalid-result.txt b/Tests/RunCMake/try_compile/TargetTypeInvalid-result.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/Tests/RunCMake/try_compile/TargetTypeInvalid-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/try_compile/TargetTypeInvalid-stderr.txt b/Tests/RunCMake/try_compile/TargetTypeInvalid-stderr.txt new file mode 100644 index 0000000..08b281a --- /dev/null +++ b/Tests/RunCMake/try_compile/TargetTypeInvalid-stderr.txt @@ -0,0 +1,5 @@ +^CMake Error at TargetTypeInvalid.cmake:2 \(try_compile\): + Invalid value 'INVALID' for CMAKE_TRY_COMPILE_TARGET_TYPE. Only + 'EXECUTABLE' and 'STATIC_LIBRARY' are allowed. +Call Stack \(most recent call first\): + CMakeLists.txt:3 \(include\) diff --git a/Tests/RunCMake/try_compile/TargetTypeInvalid.cmake b/Tests/RunCMake/try_compile/TargetTypeInvalid.cmake new file mode 100644 index 0000000..0bbc4ac --- /dev/null +++ b/Tests/RunCMake/try_compile/TargetTypeInvalid.cmake @@ -0,0 +1,2 @@ +set(CMAKE_TRY_COMPILE_TARGET_TYPE INVALID) +try_compile(result ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src.c) diff --git a/Tests/RunCMake/try_compile/TargetTypeStatic.cmake b/Tests/RunCMake/try_compile/TargetTypeStatic.cmake new file mode 100644 index 0000000..006b8b8 --- /dev/null +++ b/Tests/RunCMake/try_compile/TargetTypeStatic.cmake @@ -0,0 +1,14 @@ +enable_language(C) +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) +try_compile(result ${CMAKE_CURRENT_BINARY_DIR} + SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/other.c + OUTPUT_VARIABLE out + COPY_FILE ${CMAKE_CURRENT_BINARY_DIR}/copy + COPY_FILE_ERROR copy_err + ) +if(NOT result) + message(FATAL_ERROR "try_compile failed:\n${out}") +endif() +if(copy_err) + message(FATAL_ERROR "try_compile COPY_FILE failed:\n${copy_err}") +endif() diff --git a/Tests/RunCMake/try_compile/other.c b/Tests/RunCMake/try_compile/other.c new file mode 100644 index 0000000..6c24f10 --- /dev/null +++ b/Tests/RunCMake/try_compile/other.c @@ -0,0 +1 @@ +int other(void) { return 0; } |