From 1befbfad3d9971335ab0e7deb1a93acfdccf0fb6 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Nov 2013 11:15:14 -0500 Subject: cmGlobalGenerator: Drop unused GenerateBuildCommand implementation This is a virtual method that is overridden by every generator subclass. The base class implementation should never be called, so replace it with a dummy implementation. --- Source/cmGlobalGenerator.cxx | 38 +++++--------------------------------- 1 file changed, 5 insertions(+), 33 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index b2a0ef7..335bf5a 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1575,40 +1575,12 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir, } std::string cmGlobalGenerator -::GenerateBuildCommand(const char* makeProgram, const char *projectName, - const char *projectDir, const char* additionalOptions, - const char *targetName, const char* config, - bool ignoreErrors, bool) +::GenerateBuildCommand(const char*, const char*, + const char*, const char*, + const char*, const char*, + bool, bool) { - // Project name & dir and config are not used yet. - (void)projectName; - (void)projectDir; - (void)config; - - std::string makeCommand = - cmSystemTools::ConvertToUnixOutputPath(makeProgram); - - // Since we have full control over the invocation of nmake, let us - // make it quiet. - if ( strcmp(this->GetName(), "NMake Makefiles") == 0 ) - { - makeCommand += " /NOLOGO "; - } - if ( ignoreErrors ) - { - makeCommand += " -i"; - } - if ( additionalOptions ) - { - makeCommand += " "; - makeCommand += additionalOptions; - } - if ( targetName ) - { - makeCommand += " "; - makeCommand += targetName; - } - return makeCommand; + return "cmGlobalGenerator::GenerateBuildCommand not implemented"; } int cmGlobalGenerator::Build( -- cgit v0.12 From 05923172f94d804dfba33957aa08ac88cc5cd0bd Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Nov 2013 15:59:32 -0500 Subject: cmGlobalGenerator: Add method to compute "cmake --build" command line Create a GenerateCMakeBuildCommand method to generate a command-line string invoking "cmake --build" for a given target and configuration. Optionally allow the "-i" make flag and additional native options. --- Source/cmGlobalGenerator.cxx | 40 +++++++++++++++++++++++++++++++++ Source/cmGlobalGenerator.h | 7 ++++++ Source/cmGlobalUnixMakefileGenerator3.h | 1 + 3 files changed, 48 insertions(+) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 335bf5a..531e1ca 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1707,6 +1707,46 @@ int cmGlobalGenerator::Build( return retVal; } +//---------------------------------------------------------------------------- +std::string cmGlobalGenerator::GenerateCMakeBuildCommand( + const char* target, const char* config, const char* native, + bool ignoreErrors) +{ + std::string makeCommand = cmSystemTools::GetCMakeCommand(); + makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str()); + makeCommand += " --build ."; + if(config && *config) + { + makeCommand += " --config \""; + makeCommand += config; + makeCommand += "\""; + } + if(target && *target) + { + makeCommand += " --target \""; + makeCommand += target; + makeCommand += "\""; + } + const char* sep = " -- "; + if(ignoreErrors) + { + const char* iflag = this->GetBuildIgnoreErrorsFlag(); + if(iflag && *iflag) + { + makeCommand += sep; + makeCommand += iflag; + sep = " "; + } + } + if(native && *native) + { + makeCommand += sep; + makeCommand += native; + } + return makeCommand; +} + +//---------------------------------------------------------------------------- void cmGlobalGenerator::AddLocalGenerator(cmLocalGenerator *lg) { this->LocalGenerators.push_back(lg); diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 2761158..82ffd64 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -134,6 +134,11 @@ public: const char *targetName, const char* config, bool ignoreErrors, bool fast); + /** Generate a "cmake --build" call for a given target and config. */ + std::string GenerateCMakeBuildCommand(const char* target, + const char* config, + const char* native, + bool ignoreErrors); ///! Set the CMake instance void SetCMakeInstance(cmake *cm); @@ -422,6 +427,8 @@ private: void ClearGeneratorMembers(); + virtual const char* GetBuildIgnoreErrorsFlag() const { return 0; } + // Cache directory content and target files to be built. struct DirectoryContent: public std::set { diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h index 608f643..322736f 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.h +++ b/Source/cmGlobalUnixMakefileGenerator3.h @@ -188,6 +188,7 @@ protected: cmGeneratedFileStream *CommandDatabase; private: + virtual const char* GetBuildIgnoreErrorsFlag() const { return "-i"; } virtual std::string GetEditCacheCommand() const; virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const; }; -- cgit v0.12 From bca67c710f21cdea70c9b23fe927c87135ee81d9 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Nov 2013 16:01:20 -0500 Subject: build_command: Return a "cmake --build" command-line Re-implement the build_command() command to use "cmake --build" instead of generating a native build tool invocation directly. This command will internally invoke the proper native build tool. This avoids requiring cmGlobalGenerator::GenerateBuildCommand to produce a string so that it can be later refactored to produce a vector with no quoting or escaping. It will also allow us to later teach CMake to delay the decision about which build tool to invoke until after the project build system is generated to disk. For example, on Visual Studio 10 and above the preferred command-line tool is MSBuild, but we need to fall back to devenv if the .sln has Intel Fortran .vfproj files. --- Help/command/build_command.rst | 45 +++++++++++++--------- Source/cmBuildCommand.cxx | 33 ++++------------ Tests/RunCMake/CTest/BeforeProject-stderr.txt | 10 ++--- .../build_command/BeforeProject-result.txt | 1 - .../build_command/BeforeProject-stderr.txt | 10 +++-- Tests/RunCMake/build_command/BeforeProject.cmake | 1 + 6 files changed, 46 insertions(+), 54 deletions(-) delete mode 100644 Tests/RunCMake/build_command/BeforeProject-result.txt diff --git a/Help/command/build_command.rst b/Help/command/build_command.rst index f4a56f0..82a9a42 100644 --- a/Help/command/build_command.rst +++ b/Help/command/build_command.rst @@ -1,37 +1,44 @@ build_command ------------- -Get the command line to build this project. +Get a command line to build the current project. +This is mainly intended for internal use by the :module:`CTest` module. -:: +.. code-block:: cmake build_command( [CONFIGURATION ] - [PROJECT_NAME ] - [TARGET ]) + [TARGET ] + [PROJECT_NAME ] # legacy, causes warning + ) -Sets the given to a string containing the command line for -building one configuration of a target in a project using the build -tool appropriate for the current CMAKE_GENERATOR. +Sets the given ```` to a command-line string of the form:: -If CONFIGURATION is omitted, CMake chooses a reasonable default value -for multi-configuration generators. CONFIGURATION is ignored for -single-configuration generators. + --build . [--config ] [--target ] [-- -i] -If PROJECT_NAME is omitted, the resulting command line will build the -top level PROJECT in the current build tree. +where ```` is the location of the :manual:`cmake(1)` command-line +tool, and ```` and ```` are the values provided to the +``CONFIGURATION`` and ``TARGET`` options, if any. The trailing ``-- -i`` +option is added for Makefile generators. -If TARGET is omitted, the resulting command line will build -everything, effectively using build target 'all' or 'ALL_BUILD'. +When invoked, this ``cmake --build`` command line will launch the +underlying build system tool. -:: +.. code-block:: cmake build_command( ) This second signature is deprecated, but still available for backwards compatibility. Use the first signature instead. -Sets the given to a string containing the command to -build this project from the root of the build tree using the build -tool given by . should be the full path to -msdev, devenv, nmake, make or one of the end user build tools. +It sets the given ```` to a command-line string as +above but without the ``--config`` or ``--target`` options. +The ```` is ignored but should be the full path to +msdev, devenv, nmake, make or one of the end user build tools +for legacy invocations. + +.. note:: + In CMake versions prior to 3.0 this command returned a command + line that directly invokes the native build tool for the current + generator. Their implementation of the ``PROJECT_NAME`` option + had no useful effects, so CMake now warns on use of the option. diff --git a/Source/cmBuildCommand.cxx b/Source/cmBuildCommand.cxx index b6e2569..c06b8ad 100644 --- a/Source/cmBuildCommand.cxx +++ b/Source/cmBuildCommand.cxx @@ -85,18 +85,7 @@ bool cmBuildCommand } } - const char* makeprogram - = this->Makefile->GetDefinition("CMAKE_MAKE_PROGRAM"); - if(!makeprogram) - { - this->Makefile->IssueMessage( - cmake::FATAL_ERROR, - "build_command() requires CMAKE_MAKE_PROGRAM to be defined. " - "Call project() or enable_language() first."); - return true; - } - - // If null/empty CONFIGURATION argument, GenerateBuildCommand uses 'Debug' + // If null/empty CONFIGURATION argument, cmake --build uses 'Debug' // in the currently implemented multi-configuration global generators... // so we put this code here to end up with the same default configuration // as the original 2-arg build_command signature: @@ -110,19 +99,15 @@ bool cmBuildCommand configuration = "Release"; } - // If null/empty PROJECT_NAME argument, use the Makefile's project name: - // - if(!project_name || !*project_name) + if(project_name && *project_name) { - project_name = this->Makefile->GetProjectName(); + this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, + "Ignoring PROJECT_NAME option because it has no effect."); } - // If null/empty TARGET argument, GenerateBuildCommand omits any mention - // of a target name on the build command line... - // std::string makecommand = this->Makefile->GetLocalGenerator() - ->GetGlobalGenerator()->GenerateBuildCommand - (makeprogram, project_name, 0, 0, target, configuration, true, false); + ->GetGlobalGenerator()->GenerateCMakeBuildCommand(target, configuration, + 0, true); this->Makefile->AddDefinition(variable, makecommand.c_str()); @@ -142,7 +127,6 @@ bool cmBuildCommand const char* define = args[0].c_str(); const char* cacheValue = this->Makefile->GetDefinition(define); - std::string makeprogram = args[1]; std::string configType = "Release"; const char* cfg = getenv("CMAKE_CONFIG_TYPE"); @@ -152,9 +136,8 @@ bool cmBuildCommand } std::string makecommand = this->Makefile->GetLocalGenerator() - ->GetGlobalGenerator()->GenerateBuildCommand - (makeprogram.c_str(), this->Makefile->GetProjectName(), 0, 0, - 0, configType.c_str(), true, false); + ->GetGlobalGenerator()->GenerateCMakeBuildCommand(0, configType.c_str(), + 0, true); if(cacheValue) { diff --git a/Tests/RunCMake/CTest/BeforeProject-stderr.txt b/Tests/RunCMake/CTest/BeforeProject-stderr.txt index 354896b..2d934a4 100644 --- a/Tests/RunCMake/CTest/BeforeProject-stderr.txt +++ b/Tests/RunCMake/CTest/BeforeProject-stderr.txt @@ -1,6 +1,6 @@ -CMake Error at .*/Modules/CTest.cmake:[0-9]+ \(build_command\): - build_command\(\) requires CMAKE_MAKE_PROGRAM to be defined. Call project\(\) - or enable_language\(\) first. +CMake Error at .*/Modules/CTestTargets.cmake:20 \(message\): + Do not include\(CTest\) before calling project\(\). Call Stack \(most recent call first\): - BeforeProject.cmake:[0-9]+ \(include\) - CMakeLists.txt:[0-9]+ \(include\) + .*/Modules/CTest.cmake:297 \(include\) + BeforeProject.cmake:1 \(include\) + CMakeLists.txt:5 \(include\) diff --git a/Tests/RunCMake/build_command/BeforeProject-result.txt b/Tests/RunCMake/build_command/BeforeProject-result.txt deleted file mode 100644 index d00491f..0000000 --- a/Tests/RunCMake/build_command/BeforeProject-result.txt +++ /dev/null @@ -1 +0,0 @@ -1 diff --git a/Tests/RunCMake/build_command/BeforeProject-stderr.txt b/Tests/RunCMake/build_command/BeforeProject-stderr.txt index d3d7661..2ae0ed1 100644 --- a/Tests/RunCMake/build_command/BeforeProject-stderr.txt +++ b/Tests/RunCMake/build_command/BeforeProject-stderr.txt @@ -1,5 +1,7 @@ -CMake Error at BeforeProject.cmake:[0-9]+ \(build_command\): - build_command\(\) requires CMAKE_MAKE_PROGRAM to be defined. Call project\(\) - or enable_language\(\) first. +CMake Warning \(dev\) at BeforeProject.cmake:2 \(message\): + build_command\(\) returned: + + .*cmake.* --build \..* Call Stack \(most recent call first\): - CMakeLists.txt:[0-9]+ \(include\) + CMakeLists.txt:5 \(include\) +This warning is for project developers. Use -Wno-dev to suppress it. diff --git a/Tests/RunCMake/build_command/BeforeProject.cmake b/Tests/RunCMake/build_command/BeforeProject.cmake index 15788d1..a2175c4 100644 --- a/Tests/RunCMake/build_command/BeforeProject.cmake +++ b/Tests/RunCMake/build_command/BeforeProject.cmake @@ -1,2 +1,3 @@ build_command(MAKECOMMAND_DEFAULT_VALUE) +message(AUTHOR_WARNING "build_command() returned:\n ${MAKECOMMAND_DEFAULT_VALUE}") project(${RunCMake_TEST} NONE) -- cgit v0.12 From 2d072069e2ef44780c214c847285df8ed8e70bba Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 16:06:08 -0500 Subject: ctest_build: Use "cmake --build" to launch the native build tool This avoids requiring cmGlobalGenerator::GenerateBuildCommand to produce a string so that it can be later refactored to produce a vector with no quoting or escaping. It also makes the ctest_build command match what "ctest -T Build" would run in a build tree configured with the new build_command() command behavior. It also ensures that the native build tool used matches that selected by the configuration of the tree to be built. --- Source/CTest/cmCTestBuildCommand.cxx | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/Source/CTest/cmCTestBuildCommand.cxx b/Source/CTest/cmCTestBuildCommand.cxx index 1f63185..12ff718 100644 --- a/Source/CTest/cmCTestBuildCommand.cxx +++ b/Source/CTest/cmCTestBuildCommand.cxx @@ -114,9 +114,6 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler() this->Makefile->GetCMakeInstance()->CreateGlobalGenerator( cmakeGeneratorName); } - this->GlobalGenerator->FindMakeProgram(this->Makefile); - const char* cmakeMakeProgram - = this->Makefile->GetDefinition("CMAKE_MAKE_PROGRAM"); if(strlen(cmakeBuildConfiguration) == 0) { const char* config = 0; @@ -133,10 +130,8 @@ cmCTestGenericHandler* cmCTestBuildCommand::InitializeHandler() std::string dir = this->CTest->GetCTestConfiguration("BuildDirectory"); std::string buildCommand = this->GlobalGenerator-> - GenerateBuildCommand(cmakeMakeProgram, - cmakeProjectName, dir.c_str(), - cmakeBuildAdditionalFlags, cmakeBuildTarget, - cmakeBuildConfiguration, true, false); + GenerateCMakeBuildCommand(cmakeBuildTarget, cmakeBuildConfiguration, + cmakeBuildAdditionalFlags, true); cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT, "SetMakeCommand:" << buildCommand.c_str() << "\n"); -- cgit v0.12 From ee6e4ac841d8094b59cd0a48c61d7ca3b68c68c2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 13:30:10 -0500 Subject: cmSystemTools: Add RunSingleCommand overload for std::vector --- Source/cmSystemTools.cxx | 18 +++++++++++++++++- Source/cmSystemTools.h | 5 +++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index f5376eb..8a0d8dc 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -616,8 +616,24 @@ bool cmSystemTools::RunSingleCommand(std::vectorconst& command, OutputOption outputflag , double timeout ) { + std::vector cmd; + for(std::vector::const_iterator i = command.begin(); + i != command.end(); ++i) + { + cmd.push_back(*i); + } + return cmSystemTools::RunSingleCommand(cmd, output, retVal, dir, + outputflag, timeout); +} + +bool cmSystemTools::RunSingleCommand(std::vectorconst& command, + std::string* output , + int* retVal , const char* dir , + OutputOption outputflag , + double timeout ) +{ std::vector argv; - for(std::vector::const_iterator a = command.begin(); + for(std::vector::const_iterator a = command.begin(); a != command.end(); ++a) { argv.push_back(a->c_str()); diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 69f6381..95c7029 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -228,6 +228,11 @@ public: * the command to run, and each argument to the command should * be in comand[1]...command[command.size()] */ + static bool RunSingleCommand(std::vector const& command, + std::string* output = 0, + int* retVal = 0, const char* dir = 0, + OutputOption outputflag = OUTPUT_MERGE, + double timeout = 0.0); static bool RunSingleCommand(std::vector const& command, std::string* output = 0, int* retVal = 0, const char* dir = 0, -- cgit v0.12 From 0814d0a6559ed3634dafb372f34491407a27c5e8 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 13:31:00 -0500 Subject: cmSystemTools: Add PrintSingleCommand method Add a method to print a command line for human reference by simply double-quoting every argument. --- Source/cmSystemTools.cxx | 17 +++++++++++++++++ Source/cmSystemTools.h | 2 ++ 2 files changed, 19 insertions(+) diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index 8a0d8dc..b3dbd05 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -795,6 +795,23 @@ bool cmSystemTools::RunSingleCommand( dir, outputflag, timeout); } +std::string +cmSystemTools::PrintSingleCommand(std::vector const& command) +{ + std::string commandStr; + const char* sep = ""; + for(std::vector::const_iterator i = command.begin(); + i != command.end(); ++i) + { + commandStr += sep; + commandStr += "\""; + commandStr += *i; + commandStr += "\""; + sep = " "; + } + return commandStr; +} + bool cmSystemTools::DoesFileExistWithExtensions( const char* name, const std::vector& headerExts) diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h index 95c7029..4e854c8 100644 --- a/Source/cmSystemTools.h +++ b/Source/cmSystemTools.h @@ -239,6 +239,8 @@ public: OutputOption outputflag = OUTPUT_MERGE, double timeout = 0.0); + static std::string PrintSingleCommand(std::vector const&); + /** * Parse arguments out of a single string command */ -- cgit v0.12 From 8904d1410be3d62fc48d3bdaa87cbce3895fc815 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 13:33:32 -0500 Subject: cmGlobalGenerator: Cleanup GenerateBuildCommand API All cmGlobalGenerator::GenerateBuildCommand call sites that need to produce a string now generate "cmake --build" commands. The remaining call sites immediately pass the result to cmSystemTools::RunSingleCommand. Avoid the intermediate string and argument parsing by directly producing a vector of strings. Also drop the ignoreErrors argument because no call sites remain that use it. --- Source/CPack/cmCPackGenerator.cxx | 18 ++++---- Source/cmGlobalGenerator.cxx | 46 ++++++++----------- Source/cmGlobalGenerator.h | 10 ++--- Source/cmGlobalNinjaGenerator.cxx | 47 +++++++------------ Source/cmGlobalNinjaGenerator.h | 18 ++++---- Source/cmGlobalUnixMakefileGenerator3.cxx | 46 +++++++------------ Source/cmGlobalUnixMakefileGenerator3.h | 16 ++++--- Source/cmGlobalVisualStudio10Generator.cxx | 65 +++++++++++---------------- Source/cmGlobalVisualStudio10Generator.h | 15 ++++--- Source/cmGlobalVisualStudio6Generator.cxx | 72 ++++++++++++------------------ Source/cmGlobalVisualStudio6Generator.h | 18 ++++---- Source/cmGlobalVisualStudio7Generator.cxx | 64 +++++++++----------------- Source/cmGlobalVisualStudio7Generator.h | 18 ++++---- Source/cmGlobalXCodeGenerator.cxx | 66 ++++++++++++--------------- Source/cmGlobalXCodeGenerator.h | 18 ++++---- Source/cmake.cxx | 2 +- 16 files changed, 234 insertions(+), 305 deletions(-) diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx index 0e16a40..5475c2f 100644 --- a/Source/CPack/cmCPackGenerator.cxx +++ b/Source/CPack/cmCPackGenerator.cxx @@ -637,19 +637,21 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( globalGenerator->FindMakeProgram(this->MakefileMap); const char* cmakeMakeProgram = this->MakefileMap->GetDefinition("CMAKE_MAKE_PROGRAM"); - std::string buildCommand - = globalGenerator->GenerateBuildCommand(cmakeMakeProgram, - installProjectName.c_str(), 0, 0, + std::vector buildCommand; + globalGenerator->GenerateBuildCommand(buildCommand, cmakeMakeProgram, + installProjectName.c_str(), installDirectory.c_str(), globalGenerator->GetPreinstallTargetName(), - buildConfig, false, false); + buildConfig, false); + std::string buildCommandStr = + cmSystemTools::PrintSingleCommand(buildCommand); cmCPackLogger(cmCPackLog::LOG_DEBUG, - "- Install command: " << buildCommand << std::endl); + "- Install command: " << buildCommandStr << std::endl); cmCPackLogger(cmCPackLog::LOG_OUTPUT, "- Run preinstall target for: " << installProjectName << std::endl); std::string output; int retVal = 1; bool resB = - cmSystemTools::RunSingleCommand(buildCommand.c_str(), + cmSystemTools::RunSingleCommand(buildCommand, &output, &retVal, installDirectory.c_str(), @@ -659,12 +661,12 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects( std::string tmpFile = this->GetOption("CPACK_TOPLEVEL_DIRECTORY"); tmpFile += "/PreinstallOutput.log"; cmGeneratedFileStream ofs(tmpFile.c_str()); - ofs << "# Run command: " << buildCommand.c_str() << std::endl + ofs << "# Run command: " << buildCommandStr.c_str() << std::endl << "# Directory: " << installDirectory.c_str() << std::endl << "# Output:" << std::endl << output.c_str() << std::endl; cmCPackLogger(cmCPackLog::LOG_ERROR, - "Problem running install command: " << buildCommand.c_str() + "Problem running install command: " << buildCommandStr.c_str() << std::endl << "Please check " << tmpFile.c_str() << " for errors" << std::endl); diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 531e1ca..b653aff 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1574,13 +1574,12 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir, this->TryCompileTimeout); } -std::string cmGlobalGenerator -::GenerateBuildCommand(const char*, const char*, - const char*, const char*, - const char*, const char*, - bool, bool) +void cmGlobalGenerator::GenerateBuildCommand( + std::vector& makeCommand, const char*, const char*, const char*, + const char*, const char*, bool, std::vector const&) { - return "cmGlobalGenerator::GenerateBuildCommand not implemented"; + makeCommand.push_back( + "cmGlobalGenerator::GenerateBuildCommand not implemented"); } int cmGlobalGenerator::Build( @@ -1592,7 +1591,6 @@ int cmGlobalGenerator::Build( bool clean, bool fast, double timeout, cmSystemTools::OutputOption outputflag, - const char* extraOptions, std::vector const& nativeOptions) { /** @@ -1620,17 +1618,17 @@ int cmGlobalGenerator::Build( // should we do a clean first? if (clean) { - std::string cleanCommand = - this->GenerateBuildCommand(makeCommandCSTR, projectName, bindir, - 0, "clean", config, false, fast); + std::vector cleanCommand; + this->GenerateBuildCommand(cleanCommand, makeCommandCSTR, projectName, + bindir, "clean", config, fast); if(output) { *output += "\nRun Clean Command:"; - *output += cleanCommand; + *output += cmSystemTools::PrintSingleCommand(cleanCommand); *output += "\n"; } - if (!cmSystemTools::RunSingleCommand(cleanCommand.c_str(), outputPtr, + if (!cmSystemTools::RunSingleCommand(cleanCommand, outputPtr, &retVal, 0, outputflag, timeout)) { cmSystemTools::SetRunCommandHideConsole(hideconsole); @@ -1652,37 +1650,29 @@ int cmGlobalGenerator::Build( } // now build - std::string makeCommand = - this->GenerateBuildCommand(makeCommandCSTR, projectName, bindir, - extraOptions, target, - config, false, fast); + std::vector makeCommand; + this->GenerateBuildCommand(makeCommand, makeCommandCSTR, projectName, + bindir, target, config, fast, nativeOptions); + std::string makeCommandStr = cmSystemTools::PrintSingleCommand(makeCommand); if(output) { *output += "\nRun Build Command:"; - *output += makeCommand; + *output += makeCommandStr; *output += "\n"; } - std::vector command = - cmSystemTools::ParseArguments(makeCommand.c_str()); - for(std::vector::const_iterator ni = nativeOptions.begin(); - ni != nativeOptions.end(); ++ni) - { - command.push_back(*ni); - } - - if (!cmSystemTools::RunSingleCommand(command, outputPtr, + if (!cmSystemTools::RunSingleCommand(makeCommand, outputPtr, &retVal, 0, outputflag, timeout)) { cmSystemTools::SetRunCommandHideConsole(hideconsole); cmSystemTools::Error ("Generator: execution of make failed. Make command was: ", - makeCommand.c_str()); + makeCommandStr.c_str()); if (output) { *output += *outputPtr; *output += "\nGenerator: execution of make failed. Make command was: " - + makeCommand + "\n"; + + makeCommandStr + "\n"; } // return to the original directory diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 82ffd64..37e12ff 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -123,16 +123,16 @@ public: bool clean, bool fast, double timeout, cmSystemTools::OutputOption outputflag=cmSystemTools::OUTPUT_NONE, - const char* extraOptions = 0, std::vector const& nativeOptions = std::vector()); - virtual std::string GenerateBuildCommand( + virtual void GenerateBuildCommand( + std::vector& makeCommand, const char* makeProgram, const char *projectName, const char *projectDir, - const char* additionalOptions, - const char *targetName, const char* config, - bool ignoreErrors, bool fast); + const char *targetName, const char* config, bool fast, + std::vector const& makeOptions = std::vector() + ); /** Generate a "cmake --build" call for a given target and config. */ std::string GenerateCMakeBuildCommand(const char* target, diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index e938065..24bfdc3 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -549,47 +549,32 @@ bool cmGlobalNinjaGenerator::UsingMinGW = false; // cmGlobalXCodeGenerator // Called by: // cmGlobalGenerator::Build() -std::string cmGlobalNinjaGenerator -::GenerateBuildCommand(const char* makeProgram, - const char* projectName, - const char* projectDir, - const char* additionalOptions, +void cmGlobalNinjaGenerator +::GenerateBuildCommand(std::vector& makeCommand, + const char* makeProgram, + const char* /*projectName*/, + const char* /*projectDir*/, const char* targetName, - const char* config, - bool ignoreErrors, - bool fast) + const char* /*config*/, + bool /*fast*/, + std::vector const& makeOptions) { - // Project name & dir and config are not used yet. - (void)projectName; - (void)projectDir; - (void)config; - // Ninja does not have -i equivalent option yet. - (void)ignoreErrors; - // We do not handle fast build yet. - (void)fast; - - std::string makeCommand = - cmSystemTools::ConvertToUnixOutputPath(makeProgram); - - if(additionalOptions) - { - makeCommand += " "; - makeCommand += additionalOptions; - } - if(targetName) + makeCommand.push_back(makeProgram); + + makeCommand.insert(makeCommand.end(), + makeOptions.begin(), makeOptions.end()); + if(targetName && *targetName) { if(strcmp(targetName, "clean") == 0) { - makeCommand += " -t clean"; + makeCommand.push_back("-t"); + makeCommand.push_back("clean"); } else { - makeCommand += " "; - makeCommand += targetName; + makeCommand.push_back(targetName); } } - - return makeCommand; } //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h index e9c8684..4fd0d5c 100644 --- a/Source/cmGlobalNinjaGenerator.h +++ b/Source/cmGlobalNinjaGenerator.h @@ -191,14 +191,16 @@ public: bool optional); /// Overloaded methods. @see cmGlobalGenerator::GenerateBuildCommand() - virtual std::string GenerateBuildCommand(const char* makeProgram, - const char* projectName, - const char* projectDir, - const char* additionalOptions, - const char* targetName, - const char* config, - bool ignoreErrors, - bool fast); + virtual void GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* projectDir, + const char* targetName, + const char* config, + bool fast, + std::vector const& makeOptions = std::vector() + ); // Setup target names virtual const char* GetAllTargetName() const { return "all"; } diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx index cfd93c2..3aa1f5f 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.cxx +++ b/Source/cmGlobalUnixMakefileGenerator3.cxx @@ -555,36 +555,27 @@ cmGlobalUnixMakefileGenerator3 this->WriteDirectoryRule2(ruleFileStream, lg, "preinstall", true, true); } - -std::string cmGlobalUnixMakefileGenerator3 -::GenerateBuildCommand(const char* makeProgram, const char *projectName, - const char *projectDir, const char* additionalOptions, - const char *targetName, const char* config, - bool ignoreErrors, bool fast) +//---------------------------------------------------------------------------- +void cmGlobalUnixMakefileGenerator3 +::GenerateBuildCommand(std::vector& makeCommand, + const char* makeProgram, + const char* /*projectName*/, + const char* /*projectDir*/, + const char* targetName, + const char* /*config*/, + bool fast, + std::vector const& makeOptions) { - // Project name & dir and config are not used yet. - (void)projectName; - (void)projectDir; - (void)config; - - std::string makeCommand = - cmSystemTools::ConvertToUnixOutputPath(makeProgram); + makeCommand.push_back(makeProgram); // Since we have full control over the invocation of nmake, let us // make it quiet. if ( strcmp(this->GetName(), "NMake Makefiles") == 0 ) { - makeCommand += " /NOLOGO "; - } - if ( ignoreErrors ) - { - makeCommand += " -i"; - } - if ( additionalOptions ) - { - makeCommand += " "; - makeCommand += additionalOptions; + makeCommand.push_back("/NOLOGO"); } + makeCommand.insert(makeCommand.end(), + makeOptions.begin(), makeOptions.end()); if ( targetName && strlen(targetName)) { cmLocalUnixMakefileGenerator3 *lg; @@ -605,22 +596,19 @@ std::string cmGlobalUnixMakefileGenerator3 lg->GetMakefile()->MakeStartDirectoriesCurrent(); } - makeCommand += " \""; std::string tname = targetName; if(fast) { tname += "/fast"; } - tname = lg->Convert(tname.c_str(),cmLocalGenerator::HOME_OUTPUT, - cmLocalGenerator::MAKEFILE); - makeCommand += tname.c_str(); - makeCommand += "\""; + tname = lg->Convert(tname.c_str(),cmLocalGenerator::HOME_OUTPUT); + cmSystemTools::ConvertToOutputSlashes(tname); + makeCommand.push_back(tname); if (!this->LocalGenerators.size()) { delete lg; } } - return makeCommand; } //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h index 322736f..284f5d1 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.h +++ b/Source/cmGlobalUnixMakefileGenerator3.h @@ -107,12 +107,16 @@ public: std::string GetEmptyRuleHackDepends() { return this->EmptyRuleHackDepends; } // change the build command for speed - virtual std::string GenerateBuildCommand - (const char* makeProgram, - const char *projectName, const char *projectDir, - const char* additionalOptions, - const char *targetName, - const char* config, bool ignoreErrors, bool fast); + virtual void GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* projectDir, + const char* targetName, + const char* config, + bool fast, + std::vector const& makeOptions = std::vector() + ); /** Record per-target progress information. */ void RecordTargetProgress(cmMakefileTargetGenerator* tg); diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 5e29fd7..7be10b1 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -256,49 +256,43 @@ std::string cmGlobalVisualStudio10Generator::GetUserMacrosRegKeyBase() } -std::string cmGlobalVisualStudio10Generator -::GenerateBuildCommand(const char* makeProgram, - const char *projectName, const char *projectDir, - const char* additionalOptions, const char *targetName, - const char* config, bool ignoreErrors, bool fast) +void cmGlobalVisualStudio10Generator::GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* projectDir, + const char* targetName, + const char* config, + bool fast, + std::vector const& makeOptions) { // now build the test - std::string makeCommand - = cmSystemTools::ConvertToOutputPath(makeProgram); - std::string lowerCaseCommand = makeCommand; + std::string lowerCaseCommand = makeProgram; cmSystemTools::LowerCase(lowerCaseCommand); // If makeProgram is devenv, parent class knows how to generate command: if (lowerCaseCommand.find("devenv") != std::string::npos || lowerCaseCommand.find("VCExpress") != std::string::npos) { - return cmGlobalVisualStudio7Generator::GenerateBuildCommand(makeProgram, - projectName, projectDir, additionalOptions, targetName, config, - ignoreErrors, fast); + cmGlobalVisualStudio7Generator::GenerateBuildCommand( + makeCommand, makeProgram, projectName, projectDir, + targetName, config, fast, makeOptions); + return; } // Otherwise, assume MSBuild command line, and construct accordingly. - // if there are spaces in the makeCommand, assume a full path - // and convert it to a path with no spaces in it as the - // RunSingleCommand does not like spaces - if(makeCommand.find(' ') != std::string::npos) - { - cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand); - } + makeCommand.push_back(makeProgram); + // msbuild.exe CxxOnly.sln /t:Build /p:Configuration=Debug /target:ALL_BUILD if(!targetName || strlen(targetName) == 0) { targetName = "ALL_BUILD"; } - bool clean = false; if ( targetName && strcmp(targetName, "clean") == 0 ) { - clean = true; - makeCommand += " "; - makeCommand += projectName; - makeCommand += ".sln "; - makeCommand += "/t:Clean "; + makeCommand.push_back(std::string(projectName)+".sln"); + makeCommand.push_back("/t:Clean"); } else { @@ -331,27 +325,22 @@ std::string cmGlobalVisualStudio10Generator } } } - makeCommand += " "; - makeCommand += targetProject; - makeCommand += " "; + makeCommand.push_back(targetProject); } - makeCommand += "/p:Configuration="; + std::string configArg = "/p:Configuration="; if(config && strlen(config)) { - makeCommand += config; + configArg += config; } else { - makeCommand += "Debug"; - } - makeCommand += " /p:VisualStudioVersion="; - makeCommand += this->GetIDEVersion(); - if ( additionalOptions ) - { - makeCommand += " "; - makeCommand += additionalOptions; + configArg += "Debug"; } - return makeCommand; + makeCommand.push_back(configArg); + makeCommand.push_back(std::string("/p:VisualStudioVersion=")+ + this->GetIDEVersion()); + makeCommand.insert(makeCommand.end(), + makeOptions.begin(), makeOptions.end()); } //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index e9e7cb1..f358e5e 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -32,11 +32,16 @@ public: virtual bool SetGeneratorToolset(std::string const& ts); - virtual std::string - GenerateBuildCommand(const char* makeProgram, - const char *projectName, const char *projectDir, - const char* additionalOptions, const char *targetName, - const char* config, bool ignoreErrors, bool); + virtual void GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* projectDir, + const char* targetName, + const char* config, + bool fast, + std::vector const& makeOptions = std::vector() + ); virtual void AddPlatformDefinitions(cmMakefile* mf); diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index 4006df4..612e50f 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -77,52 +77,41 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf) } } -std::string cmGlobalVisualStudio6Generator -::GenerateBuildCommand(const char* makeProgram, - const char *projectName, - const char *projectDir, - const char* additionalOptions, - const char *targetName, - const char* config, - bool ignoreErrors, - bool) +void +cmGlobalVisualStudio6Generator::GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* /*projectDir*/, + const char* targetName, + const char* config, + bool /*fast*/, + std::vector const& makeOptions + ) { - // Visual studio 6 doesn't need project dir - (void) projectDir; - // Ingoring errors is not implemented in visual studio 6 - (void) ignoreErrors; - // now build the test std::vector mp; mp.push_back("[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio" "\\6.0\\Setup;VsCommonDir]/MSDev98/Bin"); cmSystemTools::ExpandRegistryValues(mp[0]); std::string originalCommand = makeProgram; - std::string makeCommand = + std::string makeCommandFound = cmSystemTools::FindProgram(makeProgram, mp); - if(makeCommand.size() == 0) + if(makeCommandFound.size() == 0) { std::string e = "Generator cannot find Visual Studio 6 msdev program \""; e += originalCommand; e += "\" specified by CMAKE_MAKE_PROGRAM cache entry. "; e += "Please fix the setting."; cmSystemTools::Error(e.c_str()); - return ""; + return; } - makeCommand = cmSystemTools::ConvertToOutputPath(makeCommand.c_str()); - // if there are spaces in the makeCommand, assume a full path - // and convert it to a path with no spaces in it as the - // RunSingleCommand does not like spaces -#if defined(_WIN32) && !defined(__CYGWIN__) - if(makeCommand.find(' ') != std::string::npos) - { - cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand); - } -#endif - makeCommand += " "; - makeCommand += projectName; - makeCommand += ".dsw /MAKE \""; + makeCommand.push_back(makeCommandFound); + + makeCommand.push_back(std::string(projectName)+".dsw"); + makeCommand.push_back("/MAKE"); + std::string targetArg; bool clean = false; if ( targetName && strcmp(targetName, "clean") == 0 ) { @@ -131,35 +120,32 @@ std::string cmGlobalVisualStudio6Generator } if (targetName && strlen(targetName)) { - makeCommand += targetName; + targetArg += targetName; } else { - makeCommand += "ALL_BUILD"; + targetArg += "ALL_BUILD"; } - makeCommand += " - "; + targetArg += " - "; if(config && strlen(config)) { - makeCommand += config; + targetArg += config; } else { - makeCommand += "Debug"; + targetArg += "Debug"; } + makeCommand.push_back(targetArg); if(clean) { - makeCommand += "\" /CLEAN"; + makeCommand.push_back("/CLEAN"); } else { - makeCommand += "\" /BUILD"; - } - if ( additionalOptions ) - { - makeCommand += " "; - makeCommand += additionalOptions; + makeCommand.push_back("/BUILD"); } - return makeCommand; + makeCommand.insert(makeCommand.end(), + makeOptions.begin(), makeOptions.end()); } ///! Create a local generator appropriate to this Global Generator diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index 6bd39ca..1ffa130 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -52,14 +52,16 @@ public: * Try running cmake and building a file. This is used for dynalically * loaded commands, not as part of the usual build process. */ - virtual std::string GenerateBuildCommand(const char* makeProgram, - const char *projectName, - const char *projectDir, - const char* additionalOptions, - const char *targetName, - const char* config, - bool ignoreErrors, - bool fast); + virtual void GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* projectDir, + const char* targetName, + const char* config, + bool fast, + std::vector const& makeOptions = std::vector() + ); /** * Generate the all required files for building this project/tree. This diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index d476c24..04563f3 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -110,35 +110,19 @@ void cmGlobalVisualStudio7Generator } -std::string cmGlobalVisualStudio7Generator -::GenerateBuildCommand(const char* makeProgram, - const char *projectName, const char *projectDir, - const char* additionalOptions, const char *targetName, - const char* config, bool ignoreErrors, bool) -{ - // Visual studio 7 doesn't need project dir - (void) projectDir; - // Ingoring errors is not implemented in visual studio 6 - (void) ignoreErrors; - - // now build the test - std::string makeCommand = - cmSystemTools::ConvertToOutputPath(makeProgram); - std::string lowerCaseCommand = makeCommand; - cmSystemTools::LowerCase(lowerCaseCommand); - - // if there are spaces in the makeCommand, assume a full path - // and convert it to a path with no spaces in it as the - // RunSingleCommand does not like spaces -#if defined(_WIN32) && !defined(__CYGWIN__) - if(makeCommand.find(' ') != std::string::npos) - { - cmSystemTools::GetShortPath(makeCommand.c_str(), makeCommand); - } -#endif - makeCommand += " "; - makeCommand += projectName; - makeCommand += ".sln "; +void cmGlobalVisualStudio7Generator::GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* /*projectDir*/, + const char* targetName, + const char* config, + bool /*fast*/, + std::vector const& makeOptions) +{ + makeCommand.push_back(makeProgram); + + makeCommand.push_back(std::string(projectName) + ".sln"); bool clean = false; if ( targetName && strcmp(targetName, "clean") == 0 ) { @@ -147,37 +131,33 @@ std::string cmGlobalVisualStudio7Generator } if(clean) { - makeCommand += "/clean "; + makeCommand.push_back("/clean"); } else { - makeCommand += "/build "; + makeCommand.push_back("/build"); } if(config && strlen(config)) { - makeCommand += config; + makeCommand.push_back(config); } else { - makeCommand += "Debug"; + makeCommand.push_back("Debug"); } - makeCommand += " /project "; + makeCommand.push_back("/project"); if (targetName && strlen(targetName)) { - makeCommand += targetName; + makeCommand.push_back(targetName); } else { - makeCommand += "ALL_BUILD"; + makeCommand.push_back("ALL_BUILD"); } - if ( additionalOptions ) - { - makeCommand += " "; - makeCommand += additionalOptions; - } - return makeCommand; + makeCommand.insert(makeCommand.end(), + makeOptions.begin(), makeOptions.end()); } ///! Create a local generator appropriate to this Global Generator diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index 66dc443..a6c2581 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -60,14 +60,16 @@ public: * Try running cmake and building a file. This is used for dynamically * loaded commands, not as part of the usual build process. */ - virtual std::string GenerateBuildCommand(const char* makeProgram, - const char *projectName, - const char *projectDir, - const char* additionalOptions, - const char *targetName, - const char* config, - bool ignoreErrors, - bool fast); + virtual void GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* projectDir, + const char* targetName, + const char* config, + bool fast, + std::vector const& makeOptions = std::vector() + ); /** * Generate the all required files for building this project/tree. This diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 13ed143..f8ec8a0 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -257,39 +257,34 @@ void cmGlobalXCodeGenerator::EnableLanguage(std::vectorconst& } //---------------------------------------------------------------------------- -std::string cmGlobalXCodeGenerator -::GenerateBuildCommand(const char* makeProgram, - const char *projectName, - const char *projectDir, - const char* additionalOptions, - const char *targetName, - const char* config, - bool ignoreErrors, - bool) -{ - // Config is not used yet - (void) ignoreErrors; - (void) projectDir; - +void +cmGlobalXCodeGenerator::GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* /*projectDir*/, + const char* targetName, + const char* config, + bool /*fast*/, + std::vector const& makeOptions) +{ // now build the test if(makeProgram == 0 || !strlen(makeProgram)) { cmSystemTools::Error( "Generator cannot find the appropriate make command."); - return ""; + return; } - std::string makeCommand = - cmSystemTools::ConvertToOutputPath(makeProgram); - std::string lowerCaseCommand = makeCommand; - cmSystemTools::LowerCase(lowerCaseCommand); + makeCommand.push_back(makeProgram); - makeCommand += " -project "; - makeCommand += projectName; - makeCommand += ".xcode"; + makeCommand.push_back("-project"); + std::string projectArg = projectName; + projectArg += ".xcode"; if(this->XcodeVersion > 20) { - makeCommand += "proj"; + projectArg += "proj"; } + makeCommand.push_back(projectArg); bool clean = false; if ( targetName && strcmp(targetName, "clean") == 0 ) @@ -299,13 +294,13 @@ std::string cmGlobalXCodeGenerator } if(clean) { - makeCommand += " clean"; + makeCommand.push_back("clean"); } else { - makeCommand += " build"; + makeCommand.push_back("build"); } - makeCommand += " -target "; + makeCommand.push_back("-target"); // if it is a null string for config don't use it if(config && *config == 0) { @@ -313,27 +308,24 @@ std::string cmGlobalXCodeGenerator } if (targetName && strlen(targetName)) { - makeCommand += targetName; + makeCommand.push_back(targetName); } else { - makeCommand += "ALL_BUILD"; + makeCommand.push_back("ALL_BUILD"); } if(this->XcodeVersion == 15) { - makeCommand += " -buildstyle Development "; + makeCommand.push_back("-buildstyle"); + makeCommand.push_back("Development"); } else { - makeCommand += " -configuration "; - makeCommand += config?config:"Debug"; - } - if ( additionalOptions ) - { - makeCommand += " "; - makeCommand += additionalOptions; + makeCommand.push_back("-configuration"); + makeCommand.push_back(config?config:"Debug"); } - return makeCommand; + makeCommand.insert(makeCommand.end(), + makeOptions.begin(), makeOptions.end()); } //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h index 97072b2..e8cbd14 100644 --- a/Source/cmGlobalXCodeGenerator.h +++ b/Source/cmGlobalXCodeGenerator.h @@ -53,14 +53,16 @@ public: * Try running cmake and building a file. This is used for dynalically * loaded commands, not as part of the usual build process. */ - virtual std::string GenerateBuildCommand(const char* makeProgram, - const char *projectName, - const char *projectDir, - const char* additionalOptions, - const char *targetName, - const char* config, - bool ignoreErrors, - bool fast); + virtual void GenerateBuildCommand( + std::vector& makeCommand, + const char* makeProgram, + const char* projectName, + const char* projectDir, + const char* targetName, + const char* config, + bool fast, + std::vector const& makeOptions = std::vector() + ); /** * Generate the all required files for building this project/tree. This diff --git a/Source/cmake.cxx b/Source/cmake.cxx index f0f9ef7..16a6240 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -2682,7 +2682,7 @@ int cmake::Build(const std::string& dir, makeProgram.c_str(), config.c_str(), clean, false, 0, cmSystemTools::OUTPUT_PASSTHROUGH, - 0, nativeOptions); + nativeOptions); } void cmake::WatchUnusedCli(const char* var) -- cgit v0.12 From 1f679b8d46069696e14b3ff512fee2696c4e601e Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 13:08:07 -0500 Subject: Tests: Drop remnants of unused ShellInstall test The ShellInstall test has long been replaced by the CMake.Install test. --- Tests/CMakeLists.txt | 13 ---------- Tests/TestInstall.sh.in | 63 ------------------------------------------------- 2 files changed, 76 deletions(-) delete mode 100755 Tests/TestInstall.sh.in diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 6426b3a..b6e945e 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -2531,19 +2531,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ endif() endif() - if(UNIX) - string(COMPARE EQUAL "${CMAKE_INSTALL_PREFIX}" "${CMake_BINARY_DIR}/Tests/TestShellInstall/Prefix" - PREFIX_IS_FOR_TEST) - if(PREFIX_IS_FOR_TEST) - configure_file( - ${CMake_SOURCE_DIR}/Tests/TestInstall.sh.in - ${CMake_BINARY_DIR}/Tests/TestShellInstall/TestInstall.sh - @ONLY - ) - add_test(ShellInstall /bin/sh ${CMake_BINARY_DIR}/Tests/TestShellInstall/TestShellInstall.sh) - endif() - endif() - if(CMAKE_TEST_PROJECT_CSE_DIR) set(script "${CMAKE_TEST_PROJECT_CSE_DIR}/BuildProjectCSE.cmake") if(NOT EXISTS "${script}") diff --git a/Tests/TestInstall.sh.in b/Tests/TestInstall.sh.in deleted file mode 100755 index 9535780..0000000 --- a/Tests/TestInstall.sh.in +++ /dev/null @@ -1,63 +0,0 @@ -#!/bin/sh - -CMAKE_COMMAND="@CMAKE_INSTALL_PREFIX@/bin/cmake" -CMake_SOURCE_DIR="@CMake_SOURCE_DIR@" -CMake_BINARY_DIR="@CMake_BINARY_DIR@" -CMAKE_INSTALL_PREFIX="@CMAKE_INSTALL_PREFIX@" -CMAKE_BUILD_TOOL="@CMAKE_BUILD_TOOL@" - -SOURCE_DIR="${CMake_SOURCE_DIR}/Tests/Simple" -BINARY_DIR="${CMake_BINARY_DIR}/Tests/TestInstall" - -install() -{ - echo "Erasing ${CMAKE_INSTALL_PREFIX}" && - ([ ! -d "${CMAKE_INSTALL_PREFIX}" ] || rm -rf "${CMAKE_INSTALL_PREFIX}") && - mkdir -p "${CMAKE_INSTALL_PREFIX}" && - echo "Running make install" && - ( - cd "${CMake_BINARY_DIR}" && - "${CMAKE_BUILD_TOOL}" install - ) -} - -setup() -{ - echo "Entering ${BINARY_DIR}" && - cd "${BINARY_DIR}" -} - -write_cache() -{ - install || return 1 - setup || return 1 - echo "Writing CMakeCache.txt" - ( - cat > CMakeCache.txt < Date: Thu, 14 Nov 2013 09:01:14 -0500 Subject: Tests: Remove unused Source/cmaketest.h.in file This file has not been used since commit 2c2291bb (add new feature to ctest so that it can cmake, build and run a test executable, 2004-01-07). --- Source/cmaketest.h.in | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 Source/cmaketest.h.in diff --git a/Source/cmaketest.h.in b/Source/cmaketest.h.in deleted file mode 100644 index aada52d..0000000 --- a/Source/cmaketest.h.in +++ /dev/null @@ -1,16 +0,0 @@ -/*============================================================================ - CMake - Cross Platform Makefile Generator - Copyright 2000-2009 Kitware, Inc., Insight Software Consortium - - Distributed under the OSI-approved BSD License (the "License"); - see accompanying file Copyright.txt for details. - - This software is distributed WITHOUT ANY WARRANTY; without even the - implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the License for more information. -============================================================================*/ -#define CMAKE_BINARY_DIR "${CMake_BINARY_DIR}" -#define EXECUTABLE_OUTPUT_PATH "${EXECUTABLE_OUTPUT_PATH}" -#define MAKEPROGRAM "${MAKEPROGRAM}" -#define CMAKE_GENERATOR "${CMAKE_GENERATOR}" -#define DART_MAKECOMMAND "${MAKECOMMAND}" -- cgit v0.12 From 7fc7624af5403e6bff9dbc99da398be314c0b223 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 09:04:54 -0500 Subject: Tests: Move CMAKE_TEST_MAKEPROGRAM into Tests/CMakeLists.txt Also drop the temporary MAKEPROGRAM variable and the DART_ROOT special case. We never run dashboard clients with Dart anymore. --- CMakeLists.txt | 5 ----- Tests/CMakeLists.txt | 4 ++++ 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d6237b3..a13afa1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,10 +113,6 @@ endif() # for testing. Simply to improve readability of the main script. #----------------------------------------------------------------------- macro(CMAKE_SETUP_TESTING) - if (NOT DART_ROOT) - set(MAKEPROGRAM ${CMAKE_MAKE_PROGRAM}) - endif () - if(BUILD_TESTING) set(CMAKE_TEST_GENERATOR "" CACHE STRING "Generator used when running tests") @@ -125,7 +121,6 @@ macro(CMAKE_SETUP_TESTING) if(NOT CMAKE_TEST_GENERATOR) set(CMAKE_TEST_GENERATOR "${CMAKE_GENERATOR}") set(CMAKE_TEST_GENERATOR_TOOLSET "${CMAKE_GENERATOR_TOOLSET}") - set(CMAKE_TEST_MAKEPROGRAM "${MAKEPROGRAM}") else() set(CMAKE_TEST_DIFFERENT_GENERATOR TRUE) set(CMAKE_TEST_GENERATOR_TOOLSET "") diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index b6e945e..1b8b2ec 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -43,6 +43,10 @@ configure_file(${CMake_SOURCE_DIR}/Tests/EnforceConfig.cmake.in # Testing if(BUILD_TESTING) + if(NOT CMAKE_TEST_DIFFERENT_GENERATOR) + set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}") + endif() + if("${CMAKE_TEST_GENERATOR}" MATCHES "Unix Makefiles" OR ("${CMAKE_TEST_GENERATOR}" MATCHES Ninja AND NOT WIN32)) set(TEST_CompileCommandOutput 1) endif() -- cgit v0.12 From 8ee6b4763034439ce5aada285de5fa584144c6c6 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 09:18:51 -0500 Subject: Tests: Launch BootstrapTest through cmake instead of ctest Run the bootstrap script through "cmake -P" instead of "ctest --build-and-test" so that we do not need to abuse the --build-makeprogram option of the latter. --- Tests/BootstrapTest.cmake | 10 ++++++++++ Tests/CMakeLists.txt | 16 ++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 Tests/BootstrapTest.cmake diff --git a/Tests/BootstrapTest.cmake b/Tests/BootstrapTest.cmake new file mode 100644 index 0000000..9c9fe09 --- /dev/null +++ b/Tests/BootstrapTest.cmake @@ -0,0 +1,10 @@ +file(MAKE_DIRECTORY "${bin_dir}") +message(STATUS "running bootstrap: ${bootstrap}") +execute_process( + COMMAND ${bootstrap} + WORKING_DIRECTORY "${bin_dir}" + RESULT_VARIABLE result + ) +if(result) + message(FATAL_ERROR "bootstrap failed: ${result}") +endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 1b8b2ec..73f880f 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -2417,16 +2417,12 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ endif() endif() if(bootstrap) - add_test(BootstrapTest ${CMAKE_CTEST_COMMAND} - --build-and-test - ${CMake_SOURCE_DIR} - ${CMake_BINARY_DIR}/Tests/BootstrapTest - --build-nocmake - --build-noclean - --build-makeprogram ${bootstrap} - --build-generator "${CMAKE_TEST_GENERATOR}" - --test-command - ${CMake_BINARY_DIR}/Tests/BootstrapTest/Bootstrap.cmk/cmake) + add_test(NAME BootstrapTest + COMMAND ${CMAKE_CMAKE_COMMAND} + -D "bootstrap=${bootstrap}" + -D "bin_dir=${CMake_BINARY_DIR}/Tests/BootstrapTest" + -P ${CMAKE_CURRENT_SOURCE_DIR}/BootstrapTest.cmake + ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BootstrapTest") # Make this test run early during parallel execution set_tests_properties(BootstrapTest PROPERTIES COST 5000) -- cgit v0.12 From f2b1d653cf4124e32c324f54848d55f52ca8370d Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 14:16:06 -0500 Subject: Tests: Launch CMake.Install test through 'cmake --build' Use "cmake --build" to drive the "install" target from the CMake build tree itself. This avoids using the heavier "ctest --build-and-test" just to run the native build tool to drive installation. --- Tests/CMakeInstall.cmake | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/Tests/CMakeInstall.cmake b/Tests/CMakeInstall.cmake index 5f814d9..fda8c54 100644 --- a/Tests/CMakeInstall.cmake +++ b/Tests/CMakeInstall.cmake @@ -17,29 +17,15 @@ if(CMake_TEST_INSTALL) if(CMAKE_CONFIGURATION_TYPES) # There are multiple configurations. Make sure the tested # configuration is the one that is installed. - set(CMake_TEST_INSTALL_CONFIG -C "\${CTEST_CONFIGURATION_TYPE}") + set(CMake_TEST_INSTALL_CONFIG --config $) else() set(CMake_TEST_INSTALL_CONFIG) endif() - # The CTest of the CMake used to build this CMake. - if(CMAKE_CTEST_COMMAND) - set(CMake_TEST_INSTALL_CTest ${CMAKE_CTEST_COMMAND}) - else() - set(CMake_TEST_INSTALL_CTest ${CMake_BIN_DIR}/ctest) - endif() - # Add a test to install CMake through the build system install target. - add_test(CMake.Install - ${CMake_TEST_INSTALL_CTest} - ${CMake_TEST_INSTALL_CONFIG} - --build-and-test ${CMake_SOURCE_DIR} ${CMake_BINARY_DIR} - --build-generator ${CMAKE_GENERATOR} # Not CMAKE_TEST_GENERATOR - --build-project CMake - --build-makeprogram ${CMAKE_MAKE_PROGRAM} # Not CMAKE_TEST_MAKEPROGRAM - --build-nocmake - --build-noclean - --build-target install) + add_test(NAME CMake.Install + COMMAND cmake --build . --target install ${CMake_TEST_INSTALL_CONFIG} + ) # Avoid running this test simultaneously with other tests: set_tests_properties(CMake.Install PROPERTIES RUN_SERIAL ON) -- cgit v0.12 From c85672634c37d640ea99fd5b36d7889a53c922b2 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 15:11:04 -0500 Subject: Tests: Teach SimpleInstall to use "cmake --build" Switch from "ctest --build-and-test" to "cmake --build" to drive the install and package targets in the SimpleInstall test. --- Tests/SimpleInstall/CMakeLists.txt | 25 +++++++++++-------------- Tests/SimpleInstallS2/CMakeLists.txt | 25 +++++++++++-------------- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/Tests/SimpleInstall/CMakeLists.txt b/Tests/SimpleInstall/CMakeLists.txt index b969bfd..cc3c3be 100644 --- a/Tests/SimpleInstall/CMakeLists.txt +++ b/Tests/SimpleInstall/CMakeLists.txt @@ -308,7 +308,7 @@ else() endif() if(CMAKE_CONFIGURATION_TYPES) - set(SI_CONFIG -C ${CMAKE_CFG_INTDIR}) + set(SI_CONFIG --config $) else() set(SI_CONFIG) endif() @@ -367,7 +367,9 @@ set(CMAKE_INSTALL_DEBUG_LIBRARIES 1) include(InstallRequiredSystemLibraries) if(CTEST_TEST_CPACK) - set(PACKAGE_TARGET --build-target package) + set(package_command COMMAND + ${CMAKE_COMMAND} --build . --target package ${SI_CONFIG} + ) # Avoid settings that require the .zip file command line tools... # (just build an NSIS installer without component support) @@ -375,24 +377,19 @@ if(CTEST_TEST_CPACK) set(CPACK_BINARY_ZIP OFF) set(CPACK_MONOLITHIC_INSTALL ON) else() - set(PACKAGE_TARGET) + set(package_command) endif() include(CPack) +set(install_command COMMAND + ${CMAKE_COMMAND} --build . --target install ${SI_CONFIG} + ) + add_custom_command( TARGET ${install_target} POST_BUILD - COMMAND ${CMAKE_CTEST_COMMAND} - ARGS ${SI_CONFIG} - --build-and-test - ${CMAKE_SOURCE_DIR} - ${CMAKE_BINARY_DIR} - --build-generator ${CMAKE_GENERATOR} - --build-project ${PROJECT_NAME} - --build-makeprogram ${CMAKE_MAKE_PROGRAM} - --build-noclean - --build-target install - ${PACKAGE_TARGET} + ${install_command} + ${package_command} COMMENT "Install Project" ) diff --git a/Tests/SimpleInstallS2/CMakeLists.txt b/Tests/SimpleInstallS2/CMakeLists.txt index b969bfd..cc3c3be 100644 --- a/Tests/SimpleInstallS2/CMakeLists.txt +++ b/Tests/SimpleInstallS2/CMakeLists.txt @@ -308,7 +308,7 @@ else() endif() if(CMAKE_CONFIGURATION_TYPES) - set(SI_CONFIG -C ${CMAKE_CFG_INTDIR}) + set(SI_CONFIG --config $) else() set(SI_CONFIG) endif() @@ -367,7 +367,9 @@ set(CMAKE_INSTALL_DEBUG_LIBRARIES 1) include(InstallRequiredSystemLibraries) if(CTEST_TEST_CPACK) - set(PACKAGE_TARGET --build-target package) + set(package_command COMMAND + ${CMAKE_COMMAND} --build . --target package ${SI_CONFIG} + ) # Avoid settings that require the .zip file command line tools... # (just build an NSIS installer without component support) @@ -375,24 +377,19 @@ if(CTEST_TEST_CPACK) set(CPACK_BINARY_ZIP OFF) set(CPACK_MONOLITHIC_INSTALL ON) else() - set(PACKAGE_TARGET) + set(package_command) endif() include(CPack) +set(install_command COMMAND + ${CMAKE_COMMAND} --build . --target install ${SI_CONFIG} + ) + add_custom_command( TARGET ${install_target} POST_BUILD - COMMAND ${CMAKE_CTEST_COMMAND} - ARGS ${SI_CONFIG} - --build-and-test - ${CMAKE_SOURCE_DIR} - ${CMAKE_BINARY_DIR} - --build-generator ${CMAKE_GENERATOR} - --build-project ${PROJECT_NAME} - --build-makeprogram ${CMAKE_MAKE_PROGRAM} - --build-noclean - --build-target install - ${PACKAGE_TARGET} + ${install_command} + ${package_command} COMMENT "Install Project" ) -- cgit v0.12 From 95b28eb76329262d10e60f4ad67172f8a566855c Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 15:15:17 -0500 Subject: Tests: Teach MakeClean to use "cmake --build" Switch from "ctest --build-and-test" to "cmake --build" to drive the clean target in the MakeClean test. --- Tests/MakeClean/CMakeLists.txt | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/Tests/MakeClean/CMakeLists.txt b/Tests/MakeClean/CMakeLists.txt index 1308b61..8ac624a 100644 --- a/Tests/MakeClean/CMakeLists.txt +++ b/Tests/MakeClean/CMakeLists.txt @@ -44,14 +44,7 @@ add_executable(check_clean ${MakeClean_BINARY_DIR}/check_clean.c) add_custom_command( TARGET check_clean POST_BUILD - COMMAND ${CMAKE_CTEST_COMMAND} - ARGS --build-and-test - ${MakeClean_SOURCE_DIR}/ToClean - ${MakeClean_BINARY_DIR}/ToClean - --build-generator ${CMAKE_GENERATOR} - --build-project ToClean - --build-makeprogram ${CMAKE_MAKE_PROGRAM} - --build-noclean - --build-target clean + COMMAND ${CMAKE_COMMAND} --build ${MakeClean_BINARY_DIR}/ToClean + --target clean COMMENT "Clean the ToClean Project" ) -- cgit v0.12 From 4d85365307975cfdb07e824b46b76da5aed4ed1e Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 13:17:34 -0500 Subject: Tests: Fix make capability selection for empty CMAKE_TEST_MAKEPROGRAM --- Tests/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 73f880f..5fde091 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -52,7 +52,7 @@ if(BUILD_TESTING) endif() set(MAKE_IS_GNU ) - if(${CMAKE_TEST_MAKEPROGRAM} MATCHES make) + if(CMAKE_TEST_MAKEPROGRAM MATCHES make) execute_process(COMMAND ${CMAKE_TEST_MAKEPROGRAM} no_such_target --version RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_VARIABLE out) if("${res}" STREQUAL "0") @@ -64,8 +64,8 @@ if(BUILD_TESTING) # some old versions of make simply cannot handle spaces in paths if (MAKE_IS_GNU OR - "${CMAKE_TEST_MAKEPROGRAM}" MATCHES "nmake|gmake|wmake" OR - "${CMAKE_TEST_GENERATOR}" MATCHES "Visual Studio|XCode|Borland") + CMAKE_TEST_MAKEPROGRAM MATCHES "nmake|gmake|wmake" OR + CMAKE_TEST_GENERATOR MATCHES "Visual Studio|XCode|Borland") set(MAKE_SUPPORTS_SPACES 1) else() set(MAKE_SUPPORTS_SPACES 0) -- cgit v0.12 From 20bac8f19e1fa12856e96b8e9541e518068d2122 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 15:27:44 -0500 Subject: Tests: Simplify ExternalProjectUpdate test arguments Drop the -DCMAKE_TEST_MAKEPROGRAM argument because the value is not used inside the test script. --- Tests/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 5fde091..577b86c 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1141,7 +1141,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ -DExternalProjectUpdate_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate -DCMAKE_TEST_GENERATOR=${CMAKE_TEST_GENERATOR} -DCMAKE_TEST_GENERATOR_TOOLSET=${CMAKE_TEST_GENERATOR_TOOLSET} - -DCMAKE_TEST_MAKEPROGRAM=${CMAKE_TEST_MAKEPROGRAM} -DCMAKE_CTEST_COMMAND=${CMAKE_CTEST_COMMAND} -P ${CMake_SOURCE_DIR}/Tests/ExternalProjectUpdate/ExternalProjectUpdateTest.cmake ) -- cgit v0.12 From cc23f92861aeb2443cc5b6443c04a761c99bb100 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 08:19:13 -0500 Subject: Tests: Split _EXTRA_OPTIONS into _(CTEST|BUILD)_OPTIONS Some extra options are for "ctest --build-and-test" directly, and others are values for "--build-options". Split these two roles out into two separate variables and update existing uses. --- Tests/CMakeLists.txt | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 577b86c..b0aaf17 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -10,7 +10,9 @@ macro(ADD_TEST_MACRO NAME COMMAND) --build-two-config ${build_generator_args} --build-project ${proj} - ${${NAME}_EXTRA_OPTIONS} + ${${NAME}_CTEST_OPTIONS} + --build-options + ${${NAME}_BUILD_OPTIONS} --test-command ${COMMAND} ${ARGN}) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}") endmacro() @@ -782,12 +784,12 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ endif() if(CTEST_RUN_CPackComponents) - set(CPackComponents_EXTRA_OPTIONS) + set(CPackComponents_BUILD_OPTIONS) if(APPLE) - set(CPackComponents_EXTRA_OPTIONS -DCPACK_BINARY_DRAGNDROP:BOOL=ON) + set(CPackComponents_BUILD_OPTIONS -DCPACK_BINARY_DRAGNDROP:BOOL=ON) endif() if(NSIS_MAKENSIS_EXECUTABLE) - set(CPackComponents_EXTRA_OPTIONS ${CPackComponents_EXTRA_OPTIONS} + set(CPackComponents_BUILD_OPTIONS ${CPackComponents_BUILD_OPTIONS} -DCPACK_BINARY_NSIS:BOOL=ON) endif() @@ -802,7 +804,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-options -DCPACK_BINARY_DEB:BOOL=${CPACK_BINARY_DEB} -DCPACK_BINARY_RPM:BOOL=${CPACK_BINARY_RPM} - ${CPackComponents_EXTRA_OPTIONS} + ${CPackComponents_BUILD_OPTIONS} --graphviz=CPackComponents.dot --test-command ${CMAKE_CMAKE_COMMAND} "-DCPackComponents_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/CPackComponents" @@ -826,7 +828,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ # ACTIVE_CPACK_GENERATORS variable # now contains the list of 'active generators' - set(CPackComponentsForAll_EXTRA_OPTIONS) + set(CPackComponentsForAll_BUILD_OPTIONS) # set up list of CPack generators list(APPEND GENLST "ZIP") if(APPLE) @@ -861,7 +863,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-options -DCPACK_BINARY_${CPackGen}:BOOL=ON ${CPackRun_CPackComponentWay} - ${CPackComponentsForAll_EXTRA_OPTIONS} + ${CPackComponentsForAll_BUILD_OPTIONS} --graphviz=CPackComponentsForAll.dot --test-command ${CMAKE_CMAKE_COMMAND} "-DCPackComponentsForAll_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/CPackComponentsForAll/build${CPackGen}-${CPackComponentWay}" @@ -2141,7 +2143,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --output-on-failure -C "\${CTestTest_CONFIG}") if(NOT BORLAND) - set(CTestLimitDashJ_EXTRA_OPTIONS --force-new-ctest-process) + set(CTestLimitDashJ_CTEST_OPTIONS --force-new-ctest-process) add_test_macro(CTestLimitDashJ ${CMAKE_CTEST_COMMAND} -j 4 --output-on-failure -C "\${CTestTest_CONFIG}") endif() @@ -2601,8 +2603,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ endforeach() if(TEST_CompileCommandOutput) - set(CompileCommandOutput_EXTRA_OPTIONS - --build-options -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES}) + set(CompileCommandOutput_BUILD_OPTIONS + -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES}) ADD_TEST_MACRO(CompileCommandOutput "${CMake_BINARY_DIR}/Tests/CMakeLib/runcompilecommands") endif() -- cgit v0.12 From 4ac75fdfe6e7a91f3beea037d13b1f4c8c8b80ed Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Nov 2013 11:33:17 -0500 Subject: Prefer CMAKE_MAKE_PROGRAM over CMAKE_BUILD_TOOL (#14548) Historically these were both added for the Makefile and Visual Studio generators, respectively. Later the VS generators started using the CMAKE_MAKE_PROGRAM cache entry to find the IDE build tool, and the CMAKE_BUILD_TOOL was simply set as an alias. Fix the documentation to explain that CMAKE_MAKE_PROGRAM is the modern variable and that CMAKE_BUILD_TOOL is the compatibility alias, not the other way around. Replace uses of CMAKE_BUILD_TOOL with CMAKE_MAKE_PROGRAM in CMake-provided modules. Nothing needs to lookup CMAKE_BUILD_TOOL in the cache, so simply set it as a normal variable. --- Help/variable/CMAKE_BUILD_TOOL.rst | 11 +++-------- Help/variable/CMAKE_MAKE_PROGRAM.rst | 9 ++++++--- Modules/CMakeCXXInformation.cmake | 1 - Modules/CMakeCommonLanguageInclude.cmake | 6 ++---- Modules/CTest.cmake | 2 +- Source/cmGlobalKdevelopGenerator.cxx | 2 +- Tests/RunCMake/build_command/ErrorsCommon.cmake | 4 ++-- 7 files changed, 15 insertions(+), 20 deletions(-) diff --git a/Help/variable/CMAKE_BUILD_TOOL.rst b/Help/variable/CMAKE_BUILD_TOOL.rst index f0bc938..6133491 100644 --- a/Help/variable/CMAKE_BUILD_TOOL.rst +++ b/Help/variable/CMAKE_BUILD_TOOL.rst @@ -1,11 +1,6 @@ CMAKE_BUILD_TOOL ---------------- -Tool used for the actual build process. - -This variable is set to the program that will be needed to build the -output of CMake. If the generator selected was Visual Studio 6, the -CMAKE_BUILD_TOOL will be set to msdev, for Unix Makefiles it will be -set to make or gmake, and for Visual Studio 7 it set to devenv. For -NMake Makefiles the value is nmake. This can be useful for adding -special flags and commands based on the final build environment. +This variable exists only for backwards compatibility. +It contains the same value as :variable:`CMAKE_MAKE_PROGRAM`. +Use that variable instead. diff --git a/Help/variable/CMAKE_MAKE_PROGRAM.rst b/Help/variable/CMAKE_MAKE_PROGRAM.rst index 8307bc6..b546815 100644 --- a/Help/variable/CMAKE_MAKE_PROGRAM.rst +++ b/Help/variable/CMAKE_MAKE_PROGRAM.rst @@ -1,7 +1,10 @@ CMAKE_MAKE_PROGRAM ------------------ -See CMAKE_BUILD_TOOL. +Tool used for the actual build process. -This variable is around for backwards compatibility, see -CMAKE_BUILD_TOOL. +This variable is set to the program that will be needed to build the +output of CMake. If the generator selected was Visual Studio 6, the +CMAKE_MAKE_PROGRAM will be set to msdev, for Unix Makefiles it will be +set to make or gmake, and for Visual Studio 7 it set to devenv. For +NMake Makefiles the value is nmake. diff --git a/Modules/CMakeCXXInformation.cmake b/Modules/CMakeCXXInformation.cmake index 45ec95a..9cf3489 100644 --- a/Modules/CMakeCXXInformation.cmake +++ b/Modules/CMakeCXXInformation.cmake @@ -287,7 +287,6 @@ if(NOT CMAKE_CXX_LINK_EXECUTABLE) endif() mark_as_advanced( -CMAKE_BUILD_TOOL CMAKE_VERBOSE_MAKEFILE CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE diff --git a/Modules/CMakeCommonLanguageInclude.cmake b/Modules/CMakeCommonLanguageInclude.cmake index e945aa7..38a6d35 100644 --- a/Modules/CMakeCommonLanguageInclude.cmake +++ b/Modules/CMakeCommonLanguageInclude.cmake @@ -94,12 +94,10 @@ set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS_INIT} $ENV{LDFLAGS}" set (CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS_INIT}" CACHE STRING "Flags used by the linker during the creation of static libraries.") -set(CMAKE_BUILD_TOOL ${CMAKE_MAKE_PROGRAM} CACHE INTERNAL - "What is the target build tool cmake is generating for.") - +# Alias the build tool variable for backward compatibility. +set(CMAKE_BUILD_TOOL ${CMAKE_MAKE_PROGRAM}) mark_as_advanced( -CMAKE_BUILD_TOOL CMAKE_VERBOSE_MAKEFILE CMAKE_EXE_LINKER_FLAGS diff --git a/Modules/CTest.cmake b/Modules/CTest.cmake index ada8655..7759ead 100644 --- a/Modules/CTest.cmake +++ b/Modules/CTest.cmake @@ -244,7 +244,7 @@ if(BUILD_TESTING) "${CMAKE_CXX_COMPILER}" ${DART_NAME_COMPONENT}) else() get_filename_component(DART_CXX_NAME - "${CMAKE_BUILD_TOOL}" ${DART_NAME_COMPONENT}) + "${CMAKE_MAKE_PROGRAM}" ${DART_NAME_COMPONENT}) endif() if(DART_CXX_NAME MATCHES "msdev") set(DART_CXX_NAME "vs60") diff --git a/Source/cmGlobalKdevelopGenerator.cxx b/Source/cmGlobalKdevelopGenerator.cxx index e7c857e..273d4bb 100644 --- a/Source/cmGlobalKdevelopGenerator.cxx +++ b/Source/cmGlobalKdevelopGenerator.cxx @@ -462,7 +462,7 @@ void cmGlobalKdevelopGenerator " 1\n" " false\n" " " << this->GlobalGenerator->GetLocalGenerators()[0]-> - GetMakefile()->GetRequiredDefinition("CMAKE_BUILD_TOOL") + GetMakefile()->GetRequiredDefinition("CMAKE_MAKE_PROGRAM") << " \n" " default\n" " \n" diff --git a/Tests/RunCMake/build_command/ErrorsCommon.cmake b/Tests/RunCMake/build_command/ErrorsCommon.cmake index d224539..f007b88 100644 --- a/Tests/RunCMake/build_command/ErrorsCommon.cmake +++ b/Tests/RunCMake/build_command/ErrorsCommon.cmake @@ -37,9 +37,9 @@ build_command(cmd) message("4. cmd='${cmd}'") # Test the two-arg legacy signature: -build_command(legacy_cmd ${CMAKE_BUILD_TOOL}) +build_command(legacy_cmd ${CMAKE_MAKE_PROGRAM}) message("5. legacy_cmd='${legacy_cmd}'") -message(" CMAKE_BUILD_TOOL='${CMAKE_BUILD_TOOL}'") +message(" CMAKE_MAKE_PROGRAM='${CMAKE_MAKE_PROGRAM}'") # Test the optional KEYWORDs: build_command(cmd CONFIGURATION hoohaaConfig) -- cgit v0.12 From 5f5c92b9a2c2f9c780c08e23231b93af71f175bd Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Nov 2013 14:27:51 -0500 Subject: VS: Add internal APIs to find MSBuild, devenv/VCExpress, and msdev Teach the VS generators to compute the locations of these tools directly from registry entries. Add internal APIs to get the locations on demand. --- Source/cmGlobalVisualStudio10Generator.cxx | 45 ++++++++++++++++++++++++++++++ Source/cmGlobalVisualStudio10Generator.h | 7 +++++ Source/cmGlobalVisualStudio6Generator.cxx | 28 +++++++++++++++++++ Source/cmGlobalVisualStudio6Generator.h | 4 +++ Source/cmGlobalVisualStudio7Generator.cxx | 28 +++++++++++++++++++ Source/cmGlobalVisualStudio7Generator.h | 5 ++++ Source/cmGlobalVisualStudio8Generator.cxx | 20 +++++++++++++ Source/cmGlobalVisualStudio8Generator.h | 2 ++ 8 files changed, 139 insertions(+) diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 7be10b1..d4d67d0 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -98,6 +98,7 @@ cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0\\Setup\\VC;" "ProductDir", vc10Express, cmSystemTools::KeyWOW64_32); this->MasmEnabled = false; + this->MSBuildCommandInitialized = false; } //---------------------------------------------------------------------------- @@ -255,7 +256,51 @@ std::string cmGlobalVisualStudio10Generator::GetUserMacrosRegKeyBase() return "Software\\Microsoft\\VisualStudio\\10.0\\vsmacros"; } +//---------------------------------------------------------------------------- +std::string const& cmGlobalVisualStudio10Generator::GetMSBuildCommand() +{ + if(!this->MSBuildCommandInitialized) + { + this->MSBuildCommandInitialized = true; + this->MSBuildCommand = this->FindMSBuildCommand(); + } + return this->MSBuildCommand; +} + +//---------------------------------------------------------------------------- +std::string cmGlobalVisualStudio10Generator::FindMSBuildCommand() +{ + std::string msbuild; + std::string mskey = + "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\"; + mskey += this->GetToolsVersion(); + mskey += ";MSBuildToolsPath"; + if(cmSystemTools::ReadRegistryValue(mskey.c_str(), msbuild, + cmSystemTools::KeyWOW64_32)) + { + cmSystemTools::ConvertToUnixSlashes(msbuild); + msbuild += "/"; + } + msbuild += "MSBuild.exe"; + return msbuild; +} +//---------------------------------------------------------------------------- +std::string cmGlobalVisualStudio10Generator::FindDevEnvCommand() +{ + if(this->ExpressEdition) + { + // Visual Studio Express >= 10 do not have "devenv.com" or + // "VCExpress.exe" that we can use to build reliably. + // Tell the caller it needs to use MSBuild instead. + return ""; + } + // Skip over the cmGlobalVisualStudio8Generator implementation because + // we expect a real devenv and do not want to look for VCExpress. + return this->cmGlobalVisualStudio71Generator::FindDevEnvCommand(); +} + +//---------------------------------------------------------------------------- void cmGlobalVisualStudio10Generator::GenerateBuildCommand( std::vector& makeCommand, const char* makeProgram, diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index f358e5e..ad0aa6d 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -94,6 +94,8 @@ public: protected: virtual const char* GetIDEVersion() { return "10.0"; } + std::string const& GetMSBuildCommand(); + std::string PlatformToolset; bool ExpressEdition; bool MasmEnabled; @@ -111,5 +113,10 @@ private: std::string SourceRel; }; LongestSourcePath LongestSource; + + std::string MSBuildCommand; + bool MSBuildCommandInitialized; + virtual std::string FindMSBuildCommand(); + virtual std::string FindDevEnvCommand(); }; #endif diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index 612e50f..51f38c2 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -33,6 +33,7 @@ std::string GetVS6TargetName(const std::string& targetName) cmGlobalVisualStudio6Generator::cmGlobalVisualStudio6Generator() { this->FindMakeProgramFile = "CMakeVS6FindMake.cmake"; + this->MSDevCommandInitialized = false; } void cmGlobalVisualStudio6Generator @@ -77,6 +78,33 @@ void cmGlobalVisualStudio6Generator::GenerateConfigurations(cmMakefile* mf) } } +//---------------------------------------------------------------------------- +std::string const& cmGlobalVisualStudio6Generator::GetMSDevCommand() +{ + if(!this->MSDevCommandInitialized) + { + this->MSDevCommandInitialized = true; + this->MSDevCommand = this->FindMSDevCommand(); + } + return this->MSDevCommand; +} + +//---------------------------------------------------------------------------- +std::string cmGlobalVisualStudio6Generator::FindMSDevCommand() +{ + std::string vscmd; + std::string vskey = this->GetRegistryBase() + "\\Setup;VsCommonDir"; + if(cmSystemTools::ReadRegistryValue(vskey.c_str(), vscmd, + cmSystemTools::KeyWOW64_32)) + { + cmSystemTools::ConvertToUnixSlashes(vscmd); + vscmd += "/MSDev98/Bin/"; + } + vscmd += "msdev.exe"; + return vscmd; +} + +//---------------------------------------------------------------------------- void cmGlobalVisualStudio6Generator::GenerateBuildCommand( std::vector& makeCommand, diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index 1ffa130..24f46b3 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -102,6 +102,10 @@ private: const std::set& dependencies); void WriteDSWFooter(std::ostream& fout); virtual std::string WriteUtilityDepend(cmTarget* target); + std::string MSDevCommand; + bool MSDevCommandInitialized; + std::string const& GetMSDevCommand(); + std::string FindMSDevCommand(); }; #endif diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 04563f3..2602f83 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -22,6 +22,7 @@ cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator( { this->FindMakeProgramFile = "CMakeVS7FindMake.cmake"; this->IntelProjectVersion = 0; + this->DevEnvCommandInitialized = false; if (!platformName) { @@ -110,6 +111,33 @@ void cmGlobalVisualStudio7Generator } +//---------------------------------------------------------------------------- +std::string const& cmGlobalVisualStudio7Generator::GetDevEnvCommand() +{ + if(!this->DevEnvCommandInitialized) + { + this->DevEnvCommandInitialized = true; + this->DevEnvCommand = this->FindDevEnvCommand(); + } + return this->DevEnvCommand; +} + +//---------------------------------------------------------------------------- +std::string cmGlobalVisualStudio7Generator::FindDevEnvCommand() +{ + std::string vscmd; + std::string vskey = this->GetRegistryBase() + ";InstallDir"; + if(cmSystemTools::ReadRegistryValue(vskey.c_str(), vscmd, + cmSystemTools::KeyWOW64_32)) + { + cmSystemTools::ConvertToUnixSlashes(vscmd); + vscmd += "/"; + } + vscmd += "devenv.com"; + return vscmd; +} + +//---------------------------------------------------------------------------- void cmGlobalVisualStudio7Generator::GenerateBuildCommand( std::vector& makeCommand, const char* makeProgram, diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index a6c2581..d272fa0 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -110,6 +110,9 @@ public: protected: virtual const char* GetIDEVersion() { return "7.0"; } + std::string const& GetDevEnvCommand(); + virtual std::string FindDevEnvCommand(); + static cmIDEFlagTable const* GetExtraFlagTableVS7(); virtual void OutputSLNFile(cmLocalGenerator* root, std::vector& generators); @@ -168,6 +171,8 @@ protected: private: char* IntelProjectVersion; + std::string DevEnvCommand; + bool DevEnvCommandInitialized; }; #define CMAKE_CHECK_BUILD_SYSTEM_TARGET "ZERO_CHECK" diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index b9bc1ae..949dd1b 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -105,6 +105,26 @@ cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator( } //---------------------------------------------------------------------------- +std::string cmGlobalVisualStudio8Generator::FindDevEnvCommand() +{ + // First look for VCExpress. + std::string vsxcmd; + std::string vsxkey = + "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\"; + vsxkey += this->GetIDEVersion(); + vsxkey += ";InstallDir"; + if(cmSystemTools::ReadRegistryValue(vsxkey.c_str(), vsxcmd, + cmSystemTools::KeyWOW64_32)) + { + cmSystemTools::ConvertToUnixSlashes(vsxcmd); + vsxcmd += "/VCExpress.exe"; + return vsxcmd; + } + // Now look for devenv. + return this->cmGlobalVisualStudio71Generator::FindDevEnvCommand(); +} + +//---------------------------------------------------------------------------- ///! Create a local generator appropriate to this Global Generator cmLocalGenerator *cmGlobalVisualStudio8Generator::CreateLocalGenerator() { diff --git a/Source/cmGlobalVisualStudio8Generator.h b/Source/cmGlobalVisualStudio8Generator.h index 2376f8a..ad01a24 100644 --- a/Source/cmGlobalVisualStudio8Generator.h +++ b/Source/cmGlobalVisualStudio8Generator.h @@ -69,6 +69,8 @@ public: protected: virtual const char* GetIDEVersion() { return "8.0"; } + virtual std::string FindDevEnvCommand(); + virtual bool VSLinksDependencies() const { return false; } bool AddCheckTarget(); -- cgit v0.12 From 123a0608dfe6cf155f0fc095cf389ae7b3d4ebb0 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 13 Nov 2013 15:12:06 -0500 Subject: Teach GenerateBuildCommand to find its own make program Add a cmGlobalGenerator::SelectMakeProgram method to select a caller-provided make program, the CMAKE_MAKE_PROGRAM cache entry, or a generator-provided default. Call it from all implementations of the GenerateBuildCommand method with the corresponding generator's default, if any. --- Source/cmGlobalGenerator.cxx | 20 ++++++++ Source/cmGlobalGenerator.h | 2 + Source/cmGlobalNinjaGenerator.cxx | 4 +- Source/cmGlobalUnixMakefileGenerator3.cxx | 4 +- Source/cmGlobalVisualStudio10Generator.cxx | 78 ++++++++++++++++++------------ Source/cmGlobalVisualStudio6Generator.cxx | 21 ++------ Source/cmGlobalVisualStudio7Generator.cxx | 16 +++++- Source/cmGlobalXCodeGenerator.cxx | 10 ++-- 8 files changed, 96 insertions(+), 59 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index b653aff..9609497 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -88,6 +88,26 @@ bool cmGlobalGenerator::SetGeneratorToolset(std::string const& ts) return false; } +std::string cmGlobalGenerator::SelectMakeProgram(const char* makeProgram, + std::string makeDefault) +{ + if(cmSystemTools::IsOff(makeProgram)) + { + makeProgram = + this->CMakeInstance->GetCacheDefinition("CMAKE_MAKE_PROGRAM"); + if(cmSystemTools::IsOff(makeProgram)) + { + makeProgram = makeDefault.c_str(); + } + if(cmSystemTools::IsOff(makeProgram) && + !(makeProgram && *makeProgram)) + { + makeProgram = "CMAKE_MAKE_PROGRAM-NOTFOUND"; + } + } + return makeProgram; +} + void cmGlobalGenerator::ResolveLanguageCompiler(const std::string &lang, cmMakefile *mf, bool optional) diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 37e12ff..74d88f3 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -334,6 +334,8 @@ protected: typedef std::vector > AutogensType; void CreateQtAutoGeneratorsTargets(AutogensType& autogens); + std::string SelectMakeProgram(const char* makeProgram, + std::string makeDefault = ""); // Fill the ProjectMap, this must be called after LocalGenerators // has been populated. diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx index 24bfdc3..77571b2 100644 --- a/Source/cmGlobalNinjaGenerator.cxx +++ b/Source/cmGlobalNinjaGenerator.cxx @@ -559,7 +559,9 @@ void cmGlobalNinjaGenerator bool /*fast*/, std::vector const& makeOptions) { - makeCommand.push_back(makeProgram); + makeCommand.push_back( + this->SelectMakeProgram(makeProgram) + ); makeCommand.insert(makeCommand.end(), makeOptions.begin(), makeOptions.end()); diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx index 3aa1f5f..e1af2f9 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.cxx +++ b/Source/cmGlobalUnixMakefileGenerator3.cxx @@ -566,7 +566,9 @@ void cmGlobalUnixMakefileGenerator3 bool fast, std::vector const& makeOptions) { - makeCommand.push_back(makeProgram); + makeCommand.push_back( + this->SelectMakeProgram(makeProgram) + ); // Since we have full control over the invocation of nmake, let us // make it quiet. diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index d4d67d0..741d591 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -311,23 +311,56 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand( bool fast, std::vector const& makeOptions) { - // now build the test - std::string lowerCaseCommand = makeProgram; - cmSystemTools::LowerCase(lowerCaseCommand); - - // If makeProgram is devenv, parent class knows how to generate command: - if (lowerCaseCommand.find("devenv") != std::string::npos || - lowerCaseCommand.find("VCExpress") != std::string::npos) + // Select the caller- or user-preferred make program, else MSBuild. + std::string makeProgramSelected = + this->SelectMakeProgram(makeProgram, this->GetMSBuildCommand()); + + // Check if the caller explicitly requested a devenv tool. + std::string makeProgramLower = makeProgramSelected; + cmSystemTools::LowerCase(makeProgramLower); + bool useDevEnv = + (makeProgramLower.find("devenv") != std::string::npos || + makeProgramLower.find("vcexpress") != std::string::npos); + + // MSBuild is preferred (and required for VS Express), but if the .sln has + // an Intel Fortran .vfproj then we have to use devenv. Parse it to find out. + cmSlnData slnData; + { + std::string slnFile; + if(projectDir && *projectDir) + { + slnFile = projectDir; + slnFile += "/"; + } + slnFile += projectName; + slnFile += ".sln"; + cmVisualStudioSlnParser parser; + if(parser.ParseFile(slnFile, slnData, + cmVisualStudioSlnParser::DataGroupProjects)) + { + std::vector slnProjects = slnData.GetProjects(); + for(std::vector::iterator i = slnProjects.begin(); + !useDevEnv && i != slnProjects.end(); ++i) + { + std::string proj = i->GetRelativePath(); + if(proj.size() > 7 && + proj.substr(proj.size()-7) == ".vfproj") + { + useDevEnv = true; + } + } + } + } + if(useDevEnv) { + // Use devenv to build solutions containing Intel Fortran projects. cmGlobalVisualStudio7Generator::GenerateBuildCommand( makeCommand, makeProgram, projectName, projectDir, targetName, config, fast, makeOptions); return; } - // Otherwise, assume MSBuild command line, and construct accordingly. - - makeCommand.push_back(makeProgram); + makeCommand.push_back(makeProgramSelected); // msbuild.exe CxxOnly.sln /t:Build /p:Configuration=Debug /target:ALL_BUILD if(!targetName || strlen(targetName) == 0) @@ -346,28 +379,11 @@ void cmGlobalVisualStudio10Generator::GenerateBuildCommand( if (targetProject.find('/') == std::string::npos) { // it might be in a subdir - cmVisualStudioSlnParser parser; - cmSlnData slnData; - std::string slnFile; - if (projectDir && *projectDir) - { - slnFile = projectDir; - slnFile += '/'; - slnFile += projectName; - } - else - { - slnFile = projectName; - } - if (parser.ParseFile(slnFile + ".sln", slnData, - cmVisualStudioSlnParser::DataGroupProjects)) + if (cmSlnProjectEntry const* proj = + slnData.GetProjectByName(targetName)) { - if (cmSlnProjectEntry const* proj = - slnData.GetProjectByName(targetName)) - { - targetProject = proj->GetRelativePath(); - cmSystemTools::ConvertToUnixSlashes(targetProject); - } + targetProject = proj->GetRelativePath(); + cmSystemTools::ConvertToUnixSlashes(targetProject); } } makeCommand.push_back(targetProject); diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index 51f38c2..08ea249 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -118,24 +118,9 @@ cmGlobalVisualStudio6Generator::GenerateBuildCommand( ) { // now build the test - std::vector mp; - mp.push_back("[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio" - "\\6.0\\Setup;VsCommonDir]/MSDev98/Bin"); - cmSystemTools::ExpandRegistryValues(mp[0]); - std::string originalCommand = makeProgram; - std::string makeCommandFound = - cmSystemTools::FindProgram(makeProgram, mp); - if(makeCommandFound.size() == 0) - { - std::string e = "Generator cannot find Visual Studio 6 msdev program \""; - e += originalCommand; - e += "\" specified by CMAKE_MAKE_PROGRAM cache entry. "; - e += "Please fix the setting."; - cmSystemTools::Error(e.c_str()); - return; - } - - makeCommand.push_back(makeCommandFound); + makeCommand.push_back( + this->SelectMakeProgram(makeProgram, this->GetMSDevCommand()) + ); makeCommand.push_back(std::string(projectName)+".dsw"); makeCommand.push_back("/MAKE"); diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 2602f83..08eff31 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -148,7 +148,21 @@ void cmGlobalVisualStudio7Generator::GenerateBuildCommand( bool /*fast*/, std::vector const& makeOptions) { - makeCommand.push_back(makeProgram); + // Select the caller- or user-preferred make program, else devenv. + std::string makeProgramSelected = + this->SelectMakeProgram(makeProgram, this->GetDevEnvCommand()); + + // Ignore the above preference if it is msbuild. + // Assume any other value is either a devenv or + // command-line compatible with devenv. + std::string makeProgramLower = makeProgramSelected; + cmSystemTools::LowerCase(makeProgramLower); + if(makeProgramLower.find("msbuild") != std::string::npos) + { + makeProgramSelected = this->GetDevEnvCommand(); + } + + makeCommand.push_back(makeProgramSelected); makeCommand.push_back(std::string(projectName) + ".sln"); bool clean = false; diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index f8ec8a0..be0459d 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -269,13 +269,9 @@ cmGlobalXCodeGenerator::GenerateBuildCommand( std::vector const& makeOptions) { // now build the test - if(makeProgram == 0 || !strlen(makeProgram)) - { - cmSystemTools::Error( - "Generator cannot find the appropriate make command."); - return; - } - makeCommand.push_back(makeProgram); + makeCommand.push_back( + this->SelectMakeProgram(makeProgram, "xcodebuild") + ); makeCommand.push_back("-project"); std::string projectArg = projectName; -- cgit v0.12 From 91a021146c7a8eb256eca7bb3d9be3acfe3ce814 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 11:14:22 -0500 Subject: Simplify some calls to cmGlobalGenerator::Build Code paths that look up CMAKE_MAKE_PROGRAM from the cache only to pass it to Build, which only passes it to GenerateBuildCommand, no longer need to do so. GenerateBuildCommand now knows how to look up CMAKE_MAKE_PROGRAM in the cache when no explicit value is given, so simply pass 0 now. --- Source/cmGlobalGenerator.cxx | 11 +---------- Source/cmake.cxx | 9 +-------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 9609497..b11b274 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1562,15 +1562,6 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir, this->FirstTimeProgress); } - std::string makeCommand = this->CMakeInstance-> - GetCacheManager()->GetCacheValue("CMAKE_MAKE_PROGRAM"); - if(makeCommand.size() == 0) - { - cmSystemTools::Error( - "Generator cannot find the appropriate make command."); - return 1; - } - std::string newTarget; if (target && strlen(target)) { @@ -1590,7 +1581,7 @@ int cmGlobalGenerator::TryCompile(const char *srcdir, const char *bindir, const char* config = mf->GetDefinition("CMAKE_TRY_COMPILE_CONFIGURATION"); return this->Build(srcdir,bindir,projectName, newTarget.c_str(), - output,makeCommand.c_str(),config,false,fast, + output,0,config,false,fast, this->TryCompileTimeout); } diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 16a6240..bf27c78 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -2663,23 +2663,16 @@ int cmake::Build(const std::string& dir, this->CreateGlobalGenerator(it.GetValue())); std::string output; std::string projName; - std::string makeProgram; if(!it.Find("CMAKE_PROJECT_NAME")) { std::cerr << "Error: could not find CMAKE_PROJECT_NAME in Cache\n"; return 1; } projName = it.GetValue(); - if(!it.Find("CMAKE_MAKE_PROGRAM")) - { - std::cerr << "Error: could not find CMAKE_MAKE_PROGRAM in Cache\n"; - return 1; - } - makeProgram = it.GetValue(); return gen->Build(0, dir.c_str(), projName.c_str(), target.c_str(), &output, - makeProgram.c_str(), + 0, config.c_str(), clean, false, 0, cmSystemTools::OUTPUT_PASSTHROUGH, nativeOptions); -- cgit v0.12 From 96966b5c804a95677e43e3938c52afbd42b5d48a Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 10:14:35 -0500 Subject: ctest: Make the --build-makeprogram optional for --build-and-test GenerateBuildCommand now knows how to lookup CMAKE_MAKE_PROGRAM or choose a generator-provided default build tool. Therefore the --build-makeprogram can now be optional and simply override the default selection when provided. Note that with --build-nocmake we now need to load the cache in order to make the CMAKE_MAKE_PROGRAM entry available to GenerateBuildCommand. --- Help/manual/ctest.1.rst | 6 +++--- Source/CTest/cmCTestBuildAndTestHandler.cxx | 13 +++++++++---- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Help/manual/ctest.1.rst b/Help/manual/ctest.1.rst index eee12fd..60d08dd 100644 --- a/Help/manual/ctest.1.rst +++ b/Help/manual/ctest.1.rst @@ -225,8 +225,8 @@ Options and or execute a test. The configure and test steps are optional. The arguments to this command line are the source and binary directories. By default this will run CMake on the Source/Bin - directories specified unless --build-nocmake is specified. Both - --build-makeprogram and --build-generator MUST be provided to use + directories specified unless --build-nocmake is specified. + The --build-generator option *must* be provided to use --build-and-test. If --test-command is specified then that will be run after the build is complete. Other options that affect this mode are --build-target --build-nocmake, --build-run-dir, @@ -265,7 +265,7 @@ Options Specify the name of the project to build. ``--build-makeprogram`` - Specify the make program to use. + Override the make program chosen by CTest with a given one. ``--build-noclean`` Skip the make clean step. diff --git a/Source/CTest/cmCTestBuildAndTestHandler.cxx b/Source/CTest/cmCTestBuildAndTestHandler.cxx index 5e53dbe..807a7e8 100644 --- a/Source/CTest/cmCTestBuildAndTestHandler.cxx +++ b/Source/CTest/cmCTestBuildAndTestHandler.cxx @@ -18,6 +18,7 @@ #include "cmGlobalGenerator.h" #include #include "cmCTestTestHandler.h" +#include "cmCacheManager.h" //---------------------------------------------------------------------- cmCTestBuildAndTestHandler::cmCTestBuildAndTestHandler() @@ -184,14 +185,14 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring) cmOStringStream out; // if the generator and make program are not specified then it is an error - if (!this->BuildGenerator.size() || !this->BuildMakeProgram.size()) + if (!this->BuildGenerator.size()) { if(outstring) { *outstring = - "--build-and-test requires that both the generator and makeprogram " - "be provided using the --build-generator and --build-makeprogram " - "command line options. "; + "--build-and-test requires that the generator " + "be provided using the --build-generator " + "command line option. "; } return 1; } @@ -238,9 +239,13 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring) if(this->BuildNoCMake) { + // Make the generator available for the Build call below. cm.SetGlobalGenerator(cm.CreateGlobalGenerator( this->BuildGenerator.c_str())); cm.SetGeneratorToolset(this->BuildGeneratorToolset); + + // Load the cache to make CMAKE_MAKE_PROGRAM available. + cm.GetCacheManager()->LoadCache(this->BinaryDir.c_str()); } else { -- cgit v0.12 From 4d1d7725f3e12399dd3785f5ffb7eae7db1be984 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 08:28:25 -0500 Subject: ctest: Teach --build-options to allow zero options The --build-options option consumes all following arguments until either --build-target or --test-command. Fix the logic to allow this to be zero options. --- Source/CTest/cmCTestBuildAndTestHandler.cxx | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/Source/CTest/cmCTestBuildAndTestHandler.cxx b/Source/CTest/cmCTestBuildAndTestHandler.cxx index 807a7e8..0fac136 100644 --- a/Source/CTest/cmCTestBuildAndTestHandler.cxx +++ b/Source/CTest/cmCTestBuildAndTestHandler.cxx @@ -513,23 +513,14 @@ int cmCTestBuildAndTestHandler::ProcessCommandLineArguments( { this->BuildNoClean = true; } - if(currentArg.find("--build-options",0) == 0 && idx < allArgs.size() - 1) + if(currentArg.find("--build-options",0) == 0) { - ++idx; - bool done = false; - while(idx < allArgs.size() && !done) + while(idx+1 < allArgs.size() && + allArgs[idx+1] != "--build-target" && + allArgs[idx+1] != "--test-command") { + ++idx; this->BuildOptions.push_back(allArgs[idx]); - if(idx+1 < allArgs.size() - && (allArgs[idx+1] == "--build-target" || - allArgs[idx+1] == "--test-command")) - { - done = true; - } - else - { - ++idx; - } } } if(currentArg.find("--test-command",0) == 0 && idx < allArgs.size() - 1) -- cgit v0.12 From 72bf2552f2c750bc52b9e2cc3f85320d6452c3a4 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 09:12:55 -0500 Subject: Tests: Pass --build-options to every test Create a "build_options" variable whose value is passed to every "ctest --build-and-test" call through the --build-options argument. --- Tests/CMakeLists.txt | 125 ++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 98 insertions(+), 27 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index b0aaf17..cd4a843 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -11,7 +11,7 @@ macro(ADD_TEST_MACRO NAME COMMAND) ${build_generator_args} --build-project ${proj} ${${NAME}_CTEST_OPTIONS} - --build-options + --build-options ${build_options} ${${NAME}_BUILD_OPTIONS} --test-command ${COMMAND} ${ARGN}) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}") @@ -83,6 +83,8 @@ if(BUILD_TESTING) ) endif() + set(build_options) + add_subdirectory(CMakeLib) add_subdirectory(CMakeOnly) add_subdirectory(RunCMake) @@ -282,6 +284,7 @@ if(BUILD_TESTING) --build-two-config ${build_generator_args} --build-project InterfaceBuildTargets + --build-options ${build_options} --test-command ${CMAKE_CMAKE_COMMAND} -E touch_nocreate ${InterfaceBuildTargets_libname} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/InterfaceBuildTargets") @@ -325,6 +328,7 @@ if(BUILD_TESTING) "${CMake_BINARY_DIR}/Tests/BundleUtilities" ${build_generator_args} --build-project BundleUtilities + --build-options ${build_options} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleUtilities") @@ -337,7 +341,7 @@ if(BUILD_TESTING) "${CMake_BINARY_DIR}/Tests/Qt4Deploy" ${build_generator_args} --build-project Qt4Deploy - --build-options + --build-options ${build_options} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} ) @@ -375,7 +379,8 @@ if(BUILD_TESTING) --build-project ExternalDataTest --build-noclean --force-new-ctest-process - --build-options -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES} + --build-options ${build_options} + -DMAKE_SUPPORTS_SPACES=${MAKE_SUPPORTS_SPACES} --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} -V ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Module/ExternalData") @@ -408,7 +413,8 @@ if(BUILD_TESTING) ${build_generator_args} --build-project LinkFlags --build-target LinkFlags - --build-options -DTEST_CONFIG=\${CTEST_CONFIGURATION_TYPE} + --build-options ${build_options} + -DTEST_CONFIG=\${CTEST_CONFIGURATION_TYPE} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LinkFlags") @@ -456,6 +462,7 @@ if(BUILD_TESTING) --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-project Simple + --build-options ${build_options} --test-command Simple) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Simple_EclipseGenerator") endif () @@ -471,6 +478,7 @@ if(BUILD_TESTING) --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-project Simple + --build-options ${build_options} --test-command Simple) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Simple_CodeBlocksGenerator") endif () @@ -485,6 +493,7 @@ if(BUILD_TESTING) --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-project Simple + --build-options ${build_options} --test-command Simple) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Simple_KDevelop3Generator") endif () @@ -503,6 +512,7 @@ if(BUILD_TESTING) --build-project SubProject ${build_generator_args} --build-target car + --build-options ${build_options} --test-command car ) @@ -528,6 +538,7 @@ if(BUILD_TESTING) --build-project foo --build-target foo --build-exe-dir "${CMake_BINARY_DIR}/Tests/SubProject/foo" + --build-options ${build_options} --test-command foo ) set_tests_properties ( SubProject-Stage2 PROPERTIES DEPENDS SubProject) @@ -568,7 +579,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project Framework - --build-options + --build-options ${build_options} "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/Framework/Install" --test-command bar) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Framework") @@ -580,6 +591,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project TargetName + --build-options ${build_options} --test-command ${CMAKE_CMAKE_COMMAND} -E compare_files ${CMake_SOURCE_DIR}/Tests/TargetName/scripts/hello_world ${CMake_BINARY_DIR}/Tests/TargetName/scripts/hello_world) @@ -593,6 +605,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project LibName --build-exe-dir "${CMake_BINARY_DIR}/Tests/LibName/lib" + --build-options ${build_options} --test-command foobar ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LibName") @@ -605,6 +618,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project CustComDepend --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustComDepend/bin" + --build-options ${build_options} --test-command foo bar.c ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CustComDepend") @@ -616,6 +630,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project ArgumentExpansion --build-exe-dir "${CMake_BINARY_DIR}/Tests/ArgumentExpansion/bin" + --build-options ${build_options} ) set_tests_properties(ArgumentExpansion PROPERTIES FAIL_REGULAR_EXPRESSION "Unexpected: ") @@ -627,7 +642,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/GeneratorExpression" ${build_generator_args} --build-project GeneratorExpression - --build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE} + --build-options ${build_options} + -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE} --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} -V ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/GeneratorExpression") @@ -640,6 +656,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project CustomCommand --build-exe-dir "${CMake_BINARY_DIR}/Tests/CustomCommand/bin" + --build-options ${build_options} --test-command CustomCommand ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CustomCommand") @@ -653,6 +670,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project TestWorkingDir + --build-options ${build_options} --test-command working ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CustomCommandWorkingDirectory") @@ -664,6 +682,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ # ${build_generator_args} # --build-project SimpleExclude # --build-two-config + # --build-options ${build_options} # --test-command t4 #--test-command "${CMAKE_COMMAND}" #"-DCONFIGURATION=\${CTEST_CONFIGURATION_TYPE}" @@ -677,6 +696,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ # ${build_generator_args} # --build-project SameName # --build-two-config +# --build-options ${build_options} # --test-command # "${CMake_BINARY_DIR}/Tests/SameName/Exe1/mytest2") @@ -687,6 +707,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project OutOfSource --build-two-config + --build-options ${build_options} --test-command "${CMake_BINARY_DIR}/Tests/OutOfSource/SubDir/OutOfSourceSubdir/simple") list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/OutOfSource") @@ -699,6 +720,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/BuildDepends" ${build_generator_args} --build-project BuildDepends + --build-options ${build_options} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BuildDepends") @@ -711,7 +733,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project TestSimpleInstall --build-two-config - --build-options + --build-options ${build_options} "-DCMAKE_INSTALL_PREFIX:PATH=${SimpleInstallInstallDir}" "-DCTEST_TEST_CPACK:BOOL=${CTEST_TEST_CPACK}" --test-command ${SimpleInstallInstallDir}/MyTest/bin/SimpleInstExe) @@ -723,7 +745,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project TestSimpleInstall --build-two-config - --build-options + --build-options ${build_options} "-DCMAKE_INSTALL_PREFIX:PATH=${SimpleInstallInstallDir}" "-DSTAGE2:BOOL=1" --test-command ${SimpleInstallInstallDir}/MyTest/bin/SimpleInstExeS2) @@ -777,6 +799,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/CPackWiXGenerator" ${build_generator_args} --build-project CPackWiXGenerator + --build-options ${build_options} --test-command ${CMAKE_CMAKE_COMMAND} "-DCPackWiXGenerator_BINARY_DIR:PATH=${CMake_BINARY_DIR}/Tests/CPackWiXGenerator" -P "${CMake_SOURCE_DIR}/Tests/CPackWiXGenerator/RunCPackVerifyResult.cmake") @@ -801,7 +824,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project CPackComponents --build-two-config --build-target package - --build-options + --build-options ${build_options} -DCPACK_BINARY_DEB:BOOL=${CPACK_BINARY_DEB} -DCPACK_BINARY_RPM:BOOL=${CPACK_BINARY_RPM} ${CPackComponents_BUILD_OPTIONS} @@ -860,7 +883,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/CPackComponentsForAll/build${CPackGen}-${CPackComponentWay}" ${build_generator_args} --build-project CPackComponentsForAll - --build-options + --build-options ${build_options} -DCPACK_BINARY_${CPackGen}:BOOL=ON ${CPackRun_CPackComponentWay} ${CPackComponentsForAll_BUILD_OPTIONS} @@ -897,6 +920,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators" ${build_generator_args} --build-project CPackTestAllGenerators + --build-options ${build_options} --test-command ${CMAKE_CMAKE_COMMAND} -D dir=${CMake_BINARY_DIR}/Tests/CPackTestAllGenerators @@ -919,6 +943,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project UseX11 --build-two-config ${X11_build_target_arg} + --build-options ${build_options} --test-command UseX11) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/X11") @@ -972,6 +997,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/LoadCommandOneConfig" ${build_generator_args} --build-project LoadCommand + --build-options ${build_options} --test-command LoadedCommand ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LoadCommandOneConfig") @@ -985,7 +1011,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project Complex --build-exe-dir "${CMake_BINARY_DIR}/Tests/Complex/bin" - --build-options + --build-options ${build_options} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} --test-command complex ) @@ -998,7 +1024,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project Complex --build-exe-dir "${CMake_BINARY_DIR}/Tests/ComplexOneConfig/bin" - --build-options + --build-options ${build_options} -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE} --test-command complex) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ComplexOneConfig") @@ -1012,6 +1038,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project HELLO --build-exe-dir "${CMake_BINARY_DIR}/Example/Demo" + --build-options ${build_options} --test-command helloDemo ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Example") @@ -1024,6 +1051,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project EnvironmentProj --build-exe-dir "${CMake_BINARY_DIR}/Tests/Environment" --force-new-ctest-process + --build-options ${build_options} --test-command ${CMAKE_CTEST_COMMAND} -V ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Environment") @@ -1034,7 +1062,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt" ${build_generator_args} --build-project QtAutomocNoQt - --build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE} + --build-options ${build_options} + -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomocNoQt") @@ -1057,7 +1086,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project QtAutogen --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt5Autogen" --force-new-ctest-process - --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=5 + --build-options ${build_options} + -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=5 --test-command ${run_autogen_test} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt5Autogen") @@ -1071,7 +1101,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project QtAutogen --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4Autogen" --force-new-ctest-process - --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=4 + --build-options ${build_options} + -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} -DQT_TEST_VERSION=4 --test-command ${run_autogen_test} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4Autogen") @@ -1084,7 +1115,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project Qt4Targets --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4Targets" --force-new-ctest-process - --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} + --build-options ${build_options} + -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE} --test-command ${CMAKE_CTEST_COMMAND} -V ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4Targets") @@ -1098,6 +1130,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project Qt4And5Automoc --build-exe-dir "${CMake_BINARY_DIR}/Tests/Qt4And5Automoc" --force-new-ctest-process + --build-options ${build_options} --test-command ${CMAKE_CTEST_COMMAND} -V ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4And5Automoc") @@ -1117,6 +1150,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project ExternalProjectTest --build-exe-dir "${CMake_BINARY_DIR}/Tests/ExternalProject" --force-new-ctest-process + --build-options ${build_options} --test-command ${CMAKE_CTEST_COMMAND} -V ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ExternalProject") @@ -1131,6 +1165,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project ExternalProjectUpdateTest --build-exe-dir "${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate" --force-new-ctest-process + --build-options ${build_options} --test-command ${CMAKE_CTEST_COMMAND} -V ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/ExternalProjectUpdate") @@ -1161,6 +1196,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project Tutorial + --build-options ${build_options} --test-command Tutorial 25.0) endforeach() list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Tutorial") @@ -1171,6 +1207,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/Testing" ${build_generator_args} --build-project Testing + --build-options ${build_options} --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} ) set_tests_properties(testing PROPERTIES PASS_REGULAR_EXPRESSION "Passed") @@ -1183,6 +1220,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project Wrapping --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin" + --build-options ${build_options} --test-command wrapping ) add_test(qtwrapping ${CMAKE_CTEST_COMMAND} @@ -1192,6 +1230,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project Wrapping --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin" + --build-options ${build_options} --test-command qtwrapping ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Wrapping") @@ -1203,6 +1242,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin" --build-project TestDriverTest + --build-options ${build_options} --test-command TestDriverTest test1 ) @@ -1213,6 +1253,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin" --build-project TestDriverTest + --build-options ${build_options} --test-command TestDriverTest test2 ) @@ -1223,6 +1264,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-exe-dir "${CMake_BINARY_DIR}/Tests/Wrapping/bin" --build-project TestDriverTest + --build-options ${build_options} --test-command TestDriverTest subdir/test3 ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/TestDriver") @@ -1234,6 +1276,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-exe-dir "${CMake_BINARY_DIR}/Tests/Dependency/Exec" ${build_generator_args} --build-project Dependency + --build-options ${build_options} --test-command exec ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Dependency") @@ -1263,7 +1306,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-exe-dir "${CMake_BINARY_DIR}/Tests/Jump/WithLibOut/Executable" --build-project Jump ${build_generator_args} - --build-options + --build-options ${build_options} -DLIBRARY_OUTPUT_PATH:PATH=${CMake_BINARY_DIR}/Tests/Jump/WithLibOut/Lib --test-command jumpExecutable ) @@ -1276,6 +1319,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-run-dir "${CMake_BINARY_DIR}/Tests/Jump/NoLibOut/Executable" --build-project Jump ${build_generator_args} + --build-options ${build_options} --test-command jumpExecutable ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Jump") @@ -1287,6 +1331,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project Plugin --build-two-config + --build-options ${build_options} --test-command bin/example) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Plugin") @@ -1302,6 +1347,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/MacRuntimePath" ${build_generator_args} --build-project MacRuntimePath + --build-options ${build_options} ) endif() @@ -1311,6 +1357,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/LinkLineOrder" ${build_generator_args} --build-project LinkLineOrder + --build-options ${build_options} --test-command Exec1 ) @@ -1320,6 +1367,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/LinkLineOrder" ${build_generator_args} --build-project LinkLineOrder + --build-options ${build_options} --test-command Exec2 ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/LinkLineOrder") @@ -1340,7 +1388,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/LinkStatic" ${build_generator_args} --build-project LinkStatic - --build-options -DMATH_LIBRARY:FILEPATH=/usr/lib/libm.a + --build-options ${build_options} + -DMATH_LIBRARY:FILEPATH=/usr/lib/libm.a --test-command LinkStatic ) endif() @@ -1352,6 +1401,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/kwsys" ${build_generator_args} --build-project kwsys + --build-options ${build_options} --test-command kwsysTestsCxx testIOS ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/kwsys") @@ -1366,6 +1416,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/SubDirSpaces/Executable Sources" ${build_generator_args} --build-project SUBDIR + --build-options ${build_options} --test-command test "${CMake_BINARY_DIR}/Tests/SubDirSpaces/ShouldBeHere" "${CMake_BINARY_DIR}/Tests/SubDirSpaces/testfromsubdir.obj" @@ -1381,6 +1432,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-exe-dir "${CMake_BINARY_DIR}/Tests/SubDir/Executable" ${build_generator_args} --build-project SUBDIR + --build-options ${build_options} --test-command test "${CMake_BINARY_DIR}/Tests/SubDir/ShouldBeHere" "${CMake_BINARY_DIR}/Tests/SubDir/testfromsubdir.obj" @@ -1393,6 +1445,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-exe-dir "${CMake_BINARY_DIR}/Tests/SubDir/Executable" ${build_generator_args} --build-project SUBDIR + --build-options ${build_options} --test-command test "${CMake_BINARY_DIR}/Tests/SubDir/ShouldBeHere" "${CMake_BINARY_DIR}/Tests/SubDir/testfromsubdir.o" @@ -1420,6 +1473,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project MakeClean --build-exe-dir "${CMake_BINARY_DIR}/MakeClean" + --build-options ${build_options} --test-command check_clean ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/MakeClean") @@ -1524,6 +1578,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project mfc_driver + --build-options ${build_options} --test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} -VV) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/MFC") @@ -1546,6 +1601,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project VSExternalInclude + --build-options ${build_options} --test-command VSExternalInclude) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSExternalInclude") @@ -1556,6 +1612,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project VSMidl + --build-options ${build_options} --test-command VSMidl) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSMidl") @@ -1629,7 +1686,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project BundleTest --build-target install # --build-target package - --build-options "-DCMAKE_INSTALL_PREFIX:PATH=${BundleTestInstallDir}" + --build-options ${build_options} + "-DCMAKE_INSTALL_PREFIX:PATH=${BundleTestInstallDir}" "-DCMake_SOURCE_DIR:PATH=${CMake_SOURCE_DIR}" --test-command ${BundleTestInstallDir}/Applications/SecondBundleExe.app/Contents/MacOS/SecondBundleExe) @@ -1642,6 +1700,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project CFBundleTest + --build-options ${build_options} --test-command ${CMAKE_CMAKE_COMMAND} -DCTEST_CONFIGURATION_TYPE=\${CTEST_CONFIGURATION_TYPE} -Ddir=${CMake_BINARY_DIR}/Tests/CFBundleTest @@ -1662,7 +1721,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project BundleGeneratorTest --build-target package - --build-options "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/BundleGeneratorTest/InstallDirectory" + --build-options ${build_options} + "-DCMAKE_INSTALL_PREFIX:PATH=${CMake_BINARY_DIR}/Tests/BundleGeneratorTest/InstallDirectory" ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleGeneratorTest") endif() @@ -1674,7 +1734,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-noclean --build-project WarnUnusedUnusedViaSet - --build-options "--warn-unused-vars") + --build-options ${build_options} + "--warn-unused-vars") set_tests_properties(WarnUnusedUnusedViaSet PROPERTIES PASS_REGULAR_EXPRESSION "unused variable \\(changing definition\\) 'UNUSED_VARIABLE'") set_tests_properties(WarnUnusedUnusedViaSet PROPERTIES @@ -1688,7 +1749,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-noclean --build-project WarnUnusedUnusedViaUnset - --build-options "--warn-unused-vars") + --build-options ${build_options} + "--warn-unused-vars") set_tests_properties(WarnUnusedUnusedViaUnset PROPERTIES PASS_REGULAR_EXPRESSION "CMake Warning .*VariableUnusedViaUnset.CMakeLists.txt:7 \\(set\\):") set_tests_properties(WarnUnusedUnusedViaUnset PROPERTIES @@ -1707,7 +1769,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused" ${build_generator_args} --build-project WarnUnusedCliUnused - --build-options "-DUNUSED_CLI_VARIABLE=Unused") + --build-options ${build_options} + "-DUNUSED_CLI_VARIABLE=Unused") set_tests_properties(WarnUnusedCliUnused PROPERTIES PASS_REGULAR_EXPRESSION "CMake Warning:.*Manually-specified variables were not used by the project:.* UNUSED_CLI_VARIABLE") list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUnusedCliUnused") @@ -1720,7 +1783,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-noclean --build-project WarnUnusedCliUsed - --build-options "-DUSED_VARIABLE=Usage proven") + --build-options ${build_options} + "-DUSED_VARIABLE=Usage proven") set_tests_properties(WarnUnusedCliUsed PROPERTIES PASS_REGULAR_EXPRESSION "Usage proven") set_tests_properties(WarnUnusedCliUsed PROPERTIES @@ -1734,7 +1798,8 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-noclean --build-project WarnUninitialized - --build-options "--warn-uninitialized") + --build-options ${build_options} + "--warn-uninitialized") set_tests_properties(WarnUninitialized PROPERTIES PASS_REGULAR_EXPRESSION "uninitialized variable 'USED_VARIABLE'") list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/WarnUninitialized") @@ -1747,6 +1812,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project TestsWorkingDirectoryProj --build-exe-dir "${CMake_BINARY_DIR}/Tests/TestsWorkingDirectory" --force-new-ctest-process + --build-options ${build_options} --test-command ${CMAKE_CTEST_COMMAND} -V -C \${CTEST_CONFIGURATION_TYPE} ) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/TestsWorkingDirectory") @@ -2444,6 +2510,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project testf --build-two-config + --build-options ${build_options} --test-command testf) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Fortran") @@ -2462,6 +2529,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project FortranC --build-two-config + --build-options ${build_options} --test-command CMakeFiles/FortranCInterface/FortranCInterface) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/FortranC") endif() @@ -2485,6 +2553,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project hello --build-two-config --build-run-dir "${CMake_BINARY_DIR}/Tests/Java/" + --build-options ${build_options} --test-command ${JAVA_RUNTIME} -classpath hello.jar HelloWorld) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Java") endif() @@ -2504,7 +2573,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/SimpleCOnly_sdcc" ${build_generator_args} --build-project SimpleC - --build-options + --build-options ${build_options} "-DCMAKE_SYSTEM_NAME=Generic" "-DCMAKE_C_COMPILER=${SDCC_EXECUTABLE}") list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/SimpleCOnly_sdcc") @@ -2522,7 +2591,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/Simple_Mingw_Linux2Win" ${build_generator_args} --build-project Simple - --build-options + --build-options ${build_options} "-DCMAKE_SYSTEM_NAME=Windows" "-DCMAKE_C_COMPILER=${MINGW_CC_LINUX2WIN_EXECUTABLE}" "-DCMAKE_CXX_COMPILER=${MINGW_CXX_LINUX2WIN_EXECUTABLE}" @@ -2616,6 +2685,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project IncludeDirectories + --build-options ${build_options} --test-command IncludeDirectories) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/IncludeDirectories") @@ -2626,6 +2696,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-two-config ${build_generator_args} --build-project InterfaceLinkLibraries + --build-options ${build_options} --test-command InterfaceLinkLibraries) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/InterfaceLinkLibraries") -- cgit v0.12 From e965cb12e2083d6b869fb30fabe7e290e6094908 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 13:32:39 -0500 Subject: Tests: Simplify CTest.BuildCommand.ProjectInSubdir configuration Collect all ctest_configure options in a list to configure it into the test script. Drop the unused -DCMAKE_MAKE_PROGRAM argument to ctest. --- Tests/CMakeLists.txt | 13 +++++++------ .../CTestBuildCommandProjectInSubdir.cmake.in | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index cd4a843..e618f14 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1829,17 +1829,18 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ # ) # A test for ctest_build() with targets in subdirectories + set(ctest_configure_options) if(CMAKE_TEST_GENERATOR_TOOLSET) - set(CMAKE_TEST_GENERATOR_TOOLSET_SELECTION "-T;${CMAKE_TEST_GENERATOR_TOOLSET};") - else() - set(CMAKE_TEST_GENERATOR_TOOLSET_SELECTION) + list(APPEND ctest_configure_options -T ${CMAKE_TEST_GENERATOR_TOOLSET}) + endif() + if(CMAKE_TEST_MAKEPROGRAM) + list(APPEND ctest_configure_options -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM}) endif() configure_file("${CMake_SOURCE_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in" "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake" @ONLY) - unset(CMAKE_TEST_GENERATOR_TOOLSET_SELECTION) + unset(ctest_configure_options) add_test(CTest.BuildCommand.ProjectInSubdir - ${CMAKE_CTEST_COMMAND} -S "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake" - -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM}) + ${CMAKE_CTEST_COMMAND} -S "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake") list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/CTestBuildCommandProjectInSubdir/Nested") set(CTEST_TEST_UPDATE 1) diff --git a/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in b/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in index ea48c78..abf010b 100644 --- a/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in +++ b/Tests/CTestBuildCommandProjectInSubdir/CTestBuildCommandProjectInSubdir.cmake.in @@ -8,5 +8,5 @@ set(CTEST_BUILD_CONFIGURATION "@CTestTest_CONFIG@") ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY}) ctest_start(Experimental) -ctest_configure(OPTIONS "@CMAKE_TEST_GENERATOR_TOOLSET_SELECTION@-DCMAKE_MAKE_PROGRAM:FILEPATH=@CMAKE_TEST_MAKEPROGRAM@") +ctest_configure(OPTIONS "@ctest_configure_options@") ctest_build(TARGET test) -- cgit v0.12 From e47d934a5a2da9f7589c801c2c232a650e2c797e Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 14:21:40 -0500 Subject: Tests: Simplify VSProjectInSubdir configuration The test is only enabled on VS 10 and above, where the generators now select for "ctest --build-and-test" the MSBuild tool by default. Simplify the test configuration by dropping the --build-makeprogram option and all the logic needed to compute its value. The test will automatically use MSBuild. --- Tests/CMakeLists.txt | 36 +++++++++++------------------------- 1 file changed, 11 insertions(+), 25 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index e618f14..fc2d8a4 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1645,31 +1645,17 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ endif() if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio ([0-5]|[6-9][0-9])") - if(CMAKE_TEST_MAKEPROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]") - set(MSBUILD_EXECUTABLE "${CMAKE_TEST_MAKEPROGRAM}") - else() - if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio (12)") - set(_msbuild_hints "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\${CMAKE_MATCH_1}.0;MSBuildToolsPath]") - else() - set(_FDIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkDir32]") - set(_FVER "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkVer32]") - set(_msbuild_hints ${_FDIR}/${_FVER}) - endif() - find_program(MSBUILD_EXECUTABLE NAMES msbuild HINTS ${_msbuild_hints}) - endif() - if(MSBUILD_EXECUTABLE) - add_test(NAME VSProjectInSubdir COMMAND ${CMAKE_CTEST_COMMAND} - --build-and-test - "${CMake_SOURCE_DIR}/Tests/VSProjectInSubdir" - "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir" - --build-two-config - --build-generator ${CMAKE_TEST_GENERATOR} - --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" - --build-makeprogram "${MSBUILD_EXECUTABLE}" - --build-project VSProjectInSubdir - --build-target test) - list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir") - endif() + # This is Visual Studio 10 or above, so the default build tool is MSBuild. + add_test(NAME VSProjectInSubdir COMMAND ${CMAKE_CTEST_COMMAND} + --build-and-test + "${CMake_SOURCE_DIR}/Tests/VSProjectInSubdir" + "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir" + --build-two-config + --build-generator ${CMAKE_TEST_GENERATOR} + --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" + --build-project VSProjectInSubdir + --build-target test) + list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSProjectInSubdir") endif() endif() -- cgit v0.12 From 003d10c248f3f55cea7885ac83300777d687c8a5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 14:27:46 -0500 Subject: Tests: Simplify VSExcludeFromDefaultBuild configuration Create a CTEST_TEST_DEVENV variable that is set to the CMAKE_MAKE_PROGRAM used for Visual Studio 7, 8, and 9. It will always be either "devenv" or "VCExpress", and not "MSBuild". Add the VSExcludeFromDefaultBuild test only when this variable is set, and use its value as the --build-makeprogram value. More work will be needed later to restore the test on VS 10 and above when devenv is available, but this is the simplest approach for now. --- Tests/CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index fc2d8a4..59aa59f 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -45,8 +45,13 @@ configure_file(${CMake_SOURCE_DIR}/Tests/EnforceConfig.cmake.in # Testing if(BUILD_TESTING) + set(CMAKE_TEST_DEVENV "") if(NOT CMAKE_TEST_DIFFERENT_GENERATOR) set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}") + if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio [7-9] " AND + NOT CMAKE_MAKE_PROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]") + set(CMAKE_TEST_DEVENV "${CMAKE_MAKE_PROGRAM}") + endif() endif() if("${CMAKE_TEST_GENERATOR}" MATCHES "Unix Makefiles" OR ("${CMAKE_TEST_GENERATOR}" MATCHES Ninja AND NOT WIN32)) @@ -1616,7 +1621,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --test-command VSMidl) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/VSMidl") - if(NOT MSVC60 AND NOT CMAKE_TEST_MAKEPROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]") + if(CMAKE_TEST_DEVENV) # The test (and tested property) works with .sln files, so it's skipped when: # * Using VS6, which doesn't use .sln files # * cmake --build is set up to use MSBuild, since the MSBuild invocation does not use the .sln file @@ -1628,7 +1633,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ "${CMake_BINARY_DIR}/Tests/VSExcludeFromDefaultBuild" --build-config ${config} --build-two-config - ${build_generator_args} + --build-generator ${CMAKE_TEST_GENERATOR} + --build-makeprogram ${CMAKE_TEST_DEVENV} + --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" --build-project VSExcludeFromDefaultBuild --test-command ${CMAKE_COMMAND} -D "activeConfig=${config}" -- cgit v0.12 From 68031abf15affedc72c13b8b7f1ff025f510bd20 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 10:33:04 -0500 Subject: Tests: Configure SubProject-Stage2 test more robustly Fix the condition that adds the test to check CMAKE_TEST_GENERATOR rather than the tools used to build CMake. Drop the test on Ninja because the generator does not support subproject generation anyway. Stop using the general build_generator_args and pass the --build-generator options explicitly. Also pass --build-makeprogram explicitly when CMAKE_TEST_MAKEPROGRAM is available because there is no CMakeCache.txt in the test project subdirectory from which to pick up the make program. --- Tests/CMakeLists.txt | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 59aa59f..43ae52a 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -506,8 +506,8 @@ if(BUILD_TESTING) endif() # test for correct sub-project generation - # not implemented in VS6 or Xcode - if(NOT MSVC60 AND NOT XCODE AND NOT MSVC70) + # not implemented in VS 6, VS 7.0, Xcode, or Ninja + if(NOT CMAKE_TEST_GENERATOR MATCHES "Visual Studio [67]$|Xcode|Ninja") # run cmake and configure all of SubProject # but only build the independent executable car add_test(SubProject ${CMAKE_CTEST_COMMAND} @@ -521,24 +521,23 @@ if(BUILD_TESTING) --test-command car ) - if(${CMAKE_TEST_GENERATOR} MATCHES "Ninja") - # The Ninja generator does not create a recursive build system. Start - # from the root directory. - set(SubProject_SUBDIR) - else() - set(SubProject_SUBDIR "/foo") - endif() - # For stage 2, do not run cmake again. # Then build the foo sub project which should build # the bar library which should be referenced because # foo links to the static library bar, but bar is not # directly in the foo sub project + if(CMAKE_TEST_MAKEPROGRAM) + set(SubProject-Stage2_BUILD_MAKEPROGRAM + --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} + ) + endif() add_test(SubProject-Stage2 ${CMAKE_CTEST_COMMAND} --build-and-test - "${CMake_SOURCE_DIR}/Tests/SubProject${SubProject_SUBDIR}" - "${CMake_BINARY_DIR}/Tests/SubProject${SubProject_SUBDIR}" - ${build_generator_args} + "${CMake_SOURCE_DIR}/Tests/SubProject/foo" + "${CMake_BINARY_DIR}/Tests/SubProject/foo" + --build-generator ${CMAKE_TEST_GENERATOR} + --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" + ${SubProject-Stage2_BUILD_MAKEPROGRAM} --build-nocmake --build-project foo --build-target foo -- cgit v0.12 From fd6076d075d705c4731f71a544436ba82a1577bf Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 09:07:42 -0500 Subject: Tests: Pass CMAKE_MAKE_PROGRAM instead of --build-makeprogram Pass the CMAKE_TEST_MAKEPROGRAM, if any, to each test at CMake time in the CMAKE_MAKE_PROGRAM cache entry. Pass the CMAKE_TEST_MAKEPROGRAM into the ExportImport, Fortran, and MacRuntimePath tests so that they may do the same for the nested project configurations. Now "ctest --build-and-test" can get the make program from the test build tree cache, so drop the explicit --build-makeprogram. --- Tests/CMakeLists.txt | 10 ++++++---- Tests/ExportImport/CMakeLists.txt | 2 -- Tests/ExportImport/InitialCache.cmake.in | 1 + Tests/Fortran/CMakeLists.txt | 2 +- Tests/MacRuntimePath/CMakeLists.txt | 2 -- Tests/MacRuntimePath/InitialCache.cmake.in | 1 + 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 43ae52a..6c3e478 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -80,7 +80,6 @@ if(BUILD_TESTING) set(build_generator_args --build-generator ${CMAKE_TEST_GENERATOR} - --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} ) if(CMAKE_TEST_GENERATOR_TOOLSET) list(APPEND build_generator_args @@ -89,6 +88,9 @@ if(BUILD_TESTING) endif() set(build_options) + if(CMAKE_TEST_MAKEPROGRAM) + list(APPEND build_options -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM}) + endif() add_subdirectory(CMakeLib) add_subdirectory(CMakeOnly) @@ -254,6 +256,7 @@ if(BUILD_TESTING) ADD_TEST_MACRO(Assembler HelloAsm) ADD_TEST_MACRO(SourceGroups SourceGroups) ADD_TEST_MACRO(Preprocess Preprocess) + set(ExportImport_BUILD_OPTIONS -DCMAKE_TEST_MAKEPROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM}) ADD_TEST_MACRO(ExportImport ExportImport) ADD_TEST_MACRO(Unset Unset) ADD_TEST_MACRO(PolicyScope PolicyScope) @@ -465,7 +468,6 @@ if(BUILD_TESTING) --build-two-config --build-generator "Eclipse CDT4 - Unix Makefiles" --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-project Simple --build-options ${build_options} --test-command Simple) @@ -481,7 +483,6 @@ if(BUILD_TESTING) --build-two-config --build-generator "CodeBlocks - Unix Makefiles" --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-project Simple --build-options ${build_options} --test-command Simple) @@ -496,7 +497,6 @@ if(BUILD_TESTING) --build-two-config --build-generator "KDevelop3 - Unix Makefiles" --build-generator-toolset "${CMAKE_TEST_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM} --build-project Simple --build-options ${build_options} --test-command Simple) @@ -1352,6 +1352,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ ${build_generator_args} --build-project MacRuntimePath --build-options ${build_options} + -DCMAKE_TEST_MAKEPROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM} ) endif() @@ -2504,6 +2505,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ --build-project testf --build-two-config --build-options ${build_options} + -DCMAKE_TEST_MAKEPROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM} --test-command testf) list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Fortran") diff --git a/Tests/ExportImport/CMakeLists.txt b/Tests/ExportImport/CMakeLists.txt index b8368fc..8be8d33 100644 --- a/Tests/ExportImport/CMakeLists.txt +++ b/Tests/ExportImport/CMakeLists.txt @@ -42,7 +42,6 @@ add_custom_command( --build-target install --build-generator ${CMAKE_GENERATOR} --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-options -C${ExportImport_BINARY_DIR}/InitialCache.cmake VERBATIM ) @@ -64,7 +63,6 @@ add_custom_command( --build-project Import --build-generator ${CMAKE_GENERATOR} --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-options -C${ExportImport_BINARY_DIR}/InitialCache.cmake VERBATIM ) diff --git a/Tests/ExportImport/InitialCache.cmake.in b/Tests/ExportImport/InitialCache.cmake.in index 98d355f..fba6ee2 100644 --- a/Tests/ExportImport/InitialCache.cmake.in +++ b/Tests/ExportImport/InitialCache.cmake.in @@ -1,3 +1,4 @@ +set(CMAKE_MAKE_PROGRAM "@CMAKE_TEST_MAKEPROGRAM@" CACHE FILEPATH "Make Program") set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@" CACHE STRING "C Compiler") set(CMAKE_C_FLAGS "@CMAKE_C_FLAGS@" CACHE STRING "C Flags") set(CMAKE_C_FLAGS_DEBUG "@CMAKE_C_FLAGS_DEBUG@" CACHE STRING "C Flags") diff --git a/Tests/Fortran/CMakeLists.txt b/Tests/Fortran/CMakeLists.txt index cda5fed..8f165ce 100644 --- a/Tests/Fortran/CMakeLists.txt +++ b/Tests/Fortran/CMakeLists.txt @@ -198,13 +198,13 @@ if(TEST_MODULE_DEPENDS) --build-project ExtFort --build-generator ${CMAKE_GENERATOR} --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-options -DCMAKE_Fortran_COMPILER:STRING=${CMAKE_Fortran_COMPILER} -DCMAKE_Fortran_FLAGS:STRING=${CMAKE_Fortran_FLAGS} -DCMAKE_Fortran_FLAGS_DEBUG:STRING=${CMAKE_Fortran_FLAGS_DEBUG} -DCMAKE_Fortran_FLAGS_RELEASE:STRING=${CMAKE_Fortran_FLAGS_RELEASE} -DCMAKE_Fortran_FLAGS_MINSIZEREL:STRING=${CMAKE_Fortran_FLAGS_MINSIZEREL} -DCMAKE_Fortran_FLAGS_RELWITHDEBINFO:STRING=${CMAKE_Fortran_FLAGS_RELWITHDEBINFO} + -DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_TEST_MAKEPROGRAM} ${External_BUILD_TYPE} VERBATIM ) diff --git a/Tests/MacRuntimePath/CMakeLists.txt b/Tests/MacRuntimePath/CMakeLists.txt index 5e5b6c4..a87b41e 100644 --- a/Tests/MacRuntimePath/CMakeLists.txt +++ b/Tests/MacRuntimePath/CMakeLists.txt @@ -38,7 +38,6 @@ add_custom_command( --build-target install --build-generator ${CMAKE_GENERATOR} --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-options -C${MacRuntimePath_BINARY_DIR}/InitialCache.cmake VERBATIM ) @@ -60,7 +59,6 @@ add_custom_command( --build-project MacRuntimePath_B --build-generator ${CMAKE_GENERATOR} --build-generator-toolset "${CMAKE_GENERATOR_TOOLSET}" - --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-options -C${MacRuntimePath_BINARY_DIR}/InitialCache.cmake VERBATIM ) diff --git a/Tests/MacRuntimePath/InitialCache.cmake.in b/Tests/MacRuntimePath/InitialCache.cmake.in index be15eb3..3dc9041 100644 --- a/Tests/MacRuntimePath/InitialCache.cmake.in +++ b/Tests/MacRuntimePath/InitialCache.cmake.in @@ -1,3 +1,4 @@ +set(CMAKE_MAKE_PROGRAM "@CMAKE_TEST_MAKEPROGRAM@" CACHE FILEPATH "Make Program") set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@" CACHE STRING "C Compiler") set(CMAKE_C_FLAGS "@CMAKE_C_FLAGS@" CACHE STRING "C Flags") set(CMAKE_C_FLAGS_DEBUG "@CMAKE_C_FLAGS_DEBUG@" CACHE STRING "C Flags") -- cgit v0.12 From 72dd738bd4856dcd2a483e732a26f49e9c6dfcc4 Mon Sep 17 00:00:00 2001 From: Brad King Date: Thu, 14 Nov 2013 14:43:02 -0500 Subject: Tests: Fix MFC test heuristic for empty CMAKE_TEST_MAKEPROGRAM Also disable the MFC test if CMAKE_MAKE_PROGRAM is vcexpress. --- Tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 6c3e478..4e016e1 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1492,7 +1492,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/ # Look for evidence that this is a VCExpress build. If so, avoid # the MFC test by default. - string(TOLOWER "${CMAKE_TEST_MAKEPROGRAM}" mkprog) + string(TOLOWER "${CMAKE_MAKE_PROGRAM};${CMAKE_TEST_MAKEPROGRAM}" mkprog) if(mkprog MATCHES "vcexpress") message(STATUS "CMAKE_TEST_MAKEPROGRAM indicates vcexpress, avoiding MFC test") -- cgit v0.12 From 5229f2df63369af1734783ee190cbfc7c41fac8f Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 09:15:33 -0500 Subject: Tests: Do not use an explicit make program for VS generators Do not pass the CMAKE_MAKE_PROGRAM cache entry to tests when using the VS generators. Allow them to pick the correct build tool automatically. --- Tests/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 4e016e1..48abfae 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -47,7 +47,11 @@ configure_file(${CMake_SOURCE_DIR}/Tests/EnforceConfig.cmake.in if(BUILD_TESTING) set(CMAKE_TEST_DEVENV "") if(NOT CMAKE_TEST_DIFFERENT_GENERATOR) - set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}") + if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio") + set(CMAKE_TEST_MAKEPROGRAM "") + else() + set(CMAKE_TEST_MAKEPROGRAM "${CMAKE_MAKE_PROGRAM}") + endif() if(CMAKE_TEST_GENERATOR MATCHES "Visual Studio [7-9] " AND NOT CMAKE_MAKE_PROGRAM MATCHES "[mM][sS][bB][uU][iI][lL][dD]\\.[eE][xX][eE]") set(CMAKE_TEST_DEVENV "${CMAKE_MAKE_PROGRAM}") -- cgit v0.12 From 558c74d0abfe4f4fc8563ba615b7329083d232bc Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 10:41:45 -0500 Subject: VS: Switch to internal CMAKE_MAKE_PROGRAM lookup by generators Drop the "Modules/CMakeVS*FindMake.cmake" files. Override the cmGlobalGenerator::FindMakeProgram method for VS generators to use their internal APIs to locate the build tool. Set the CMAKE_MAKE_PROGRAM as a normal variable for use by project code, but do not cache it. This will allow CMake and CTest to select the proper tool at build time. --- Modules/CMakeVS10FindMake.cmake | 54 ------------------------------ Modules/CMakeVS11FindMake.cmake | 53 ----------------------------- Modules/CMakeVS12FindMake.cmake | 27 --------------- Modules/CMakeVS6FindMake.cmake | 25 -------------- Modules/CMakeVS71FindMake.cmake | 26 -------------- Modules/CMakeVS7FindMake.cmake | 25 -------------- Modules/CMakeVS8FindMake.cmake | 34 ------------------- Modules/CMakeVS9FindMake.cmake | 39 --------------------- Source/cmGlobalGenerator.h | 2 +- Source/cmGlobalVisualStudio10Generator.cxx | 1 - Source/cmGlobalVisualStudio10Generator.h | 1 + Source/cmGlobalVisualStudio11Generator.cxx | 1 - Source/cmGlobalVisualStudio12Generator.cxx | 1 - Source/cmGlobalVisualStudio6Generator.cxx | 1 - Source/cmGlobalVisualStudio6Generator.h | 1 + Source/cmGlobalVisualStudio71Generator.cxx | 1 - Source/cmGlobalVisualStudio7Generator.cxx | 1 - Source/cmGlobalVisualStudio7Generator.h | 1 + Source/cmGlobalVisualStudio8Generator.cxx | 1 - Source/cmGlobalVisualStudio9Generator.cxx | 1 - Source/cmGlobalVisualStudioGenerator.cxx | 13 +++++++ Source/cmGlobalVisualStudioGenerator.h | 3 ++ 22 files changed, 20 insertions(+), 292 deletions(-) delete mode 100644 Modules/CMakeVS10FindMake.cmake delete mode 100644 Modules/CMakeVS11FindMake.cmake delete mode 100644 Modules/CMakeVS12FindMake.cmake delete mode 100644 Modules/CMakeVS6FindMake.cmake delete mode 100644 Modules/CMakeVS71FindMake.cmake delete mode 100644 Modules/CMakeVS7FindMake.cmake delete mode 100644 Modules/CMakeVS8FindMake.cmake delete mode 100644 Modules/CMakeVS9FindMake.cmake diff --git a/Modules/CMakeVS10FindMake.cmake b/Modules/CMakeVS10FindMake.cmake deleted file mode 100644 index 189b626..0000000 --- a/Modules/CMakeVS10FindMake.cmake +++ /dev/null @@ -1,54 +0,0 @@ - -#============================================================================= -# Copyright 2007-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# Look for devenv as a build program. We need to use this to support -# Intel Fortran integration into VS. MSBuild can not be used for that case -# since Intel Fortran uses the older devenv file format. -find_program(CMAKE_MAKE_PROGRAM - NAMES devenv - HINTS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VS;EnvironmentDirectory] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup;Dbghelp_path] - "$ENV{ProgramFiles}/Microsoft Visual Studio 10.0/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio10.0/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio 10/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio10/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 10.0/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio10.0/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 10/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio10/Common7/IDE" - "/Program Files/Microsoft Visual Studio 10.0/Common7/IDE/" - "/Program Files/Microsoft Visual Studio 10/Common7/IDE/" - ) - -# if devenv is not found, then use MSBuild. -# it is expected that if devenv is not found, then we are -# dealing with Visual Studio Express. VCExpress has random -# failures when being run as a command line build tool which -# causes the compiler checks and try-compile stuff to fail. MSbuild -# is a better choice for this. However, VCExpress does not support -# cross compiling needed for Win CE. -if(NOT CMAKE_CROSSCOMPILING) - find_program(CMAKE_MAKE_PROGRAM - NAMES MSBuild - HINTS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VS;ProductDir] - "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/" - "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0;CLR Version]/" - "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0;CLR Version]/") -endif() - -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC10 1) -set(MSVC_VERSION 1600) diff --git a/Modules/CMakeVS11FindMake.cmake b/Modules/CMakeVS11FindMake.cmake deleted file mode 100644 index 2df015d..0000000 --- a/Modules/CMakeVS11FindMake.cmake +++ /dev/null @@ -1,53 +0,0 @@ - -#============================================================================= -# Copyright 2007-2011 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# Look for devenv as a build program. We need to use this to support -# Intel Fortran integration into VS. MSBuild can not be used for that case -# since Intel Fortran uses the older devenv file format. -find_program(CMAKE_MAKE_PROGRAM - NAMES devenv - HINTS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;EnvironmentDirectory] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup;Dbghelp_path] - "$ENV{ProgramFiles}/Microsoft Visual Studio 11.0/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio11.0/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio 11/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio11/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11.0/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11.0/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 11/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio11/Common7/IDE" - "/Program Files/Microsoft Visual Studio 11.0/Common7/IDE/" - "/Program Files/Microsoft Visual Studio 11/Common7/IDE/" - ) - -# if devenv is not found, then use MSBuild. -# it is expected that if devenv is not found, then we are -# dealing with Visual Studio Express. -if(NOT CMAKE_CROSSCOMPILING) - set(_FDIR "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkDir32]") - set(_FVER "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VC7;FrameworkVer32]") - find_program(CMAKE_MAKE_PROGRAM - NAMES MSBuild - HINTS - ${_FDIR}/${_FVER} - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] - "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/" - "c:/WINDOWS/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0;CLR Version]/" - "$ENV{SYSTEMROOT}/Microsoft.NET/Framework/[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0;CLR Version]/") -endif() - -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC11 1) -set(MSVC_VERSION 1700) diff --git a/Modules/CMakeVS12FindMake.cmake b/Modules/CMakeVS12FindMake.cmake deleted file mode 100644 index 338d9a2..0000000 --- a/Modules/CMakeVS12FindMake.cmake +++ /dev/null @@ -1,27 +0,0 @@ - -#============================================================================= -# Copyright 2007-2013 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# Always use MSBuild because: -# - devenv treats command-line builds as recently-loaded projects in the IDE -# - devenv does not appear to support non-standard platform toolsets -# If we need devenv for Intel Fortran in the future we should add -# a special case when Fortran is enabled. -find_program(CMAKE_MAKE_PROGRAM - NAMES MSBuild - HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\MSBuild\\ToolsVersions\\12.0;MSBuildToolsPath]" - ) - -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC12 1) -set(MSVC_VERSION 1800) diff --git a/Modules/CMakeVS6FindMake.cmake b/Modules/CMakeVS6FindMake.cmake deleted file mode 100644 index 40bf5b1..0000000 --- a/Modules/CMakeVS6FindMake.cmake +++ /dev/null @@ -1,25 +0,0 @@ - -#============================================================================= -# Copyright 2002-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -find_program(CMAKE_MAKE_PROGRAM - NAMES msdev - PATHS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\6.0\\Setup;VsCommonDir]/MSDev98/Bin - "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" - "c:/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" - "/Program Files/Microsoft Visual Studio/Common/MSDev98/Bin" - ) -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC60 1) -set(MSVC_VERSION 1200) diff --git a/Modules/CMakeVS71FindMake.cmake b/Modules/CMakeVS71FindMake.cmake deleted file mode 100644 index 945c3fa..0000000 --- a/Modules/CMakeVS71FindMake.cmake +++ /dev/null @@ -1,26 +0,0 @@ - -#============================================================================= -# Copyright 2003-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -find_program(CMAKE_MAKE_PROGRAM - NAMES devenv - PATHS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VS;EnvironmentDirectory] - "$ENV{ProgramFiles}/Microsoft Visual Studio .NET/Common7/IDE" - "c:/Program Files/Microsoft Visual Studio .NET/Common7/IDE" - "c:/Program Files/Microsoft Visual Studio.NET/Common7/IDE" - "/Program Files/Microsoft Visual Studio .NET/Common7/IDE/" - ) -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC71 1) -set(MSVC_VERSION 1310) diff --git a/Modules/CMakeVS7FindMake.cmake b/Modules/CMakeVS7FindMake.cmake deleted file mode 100644 index 218c5f2..0000000 --- a/Modules/CMakeVS7FindMake.cmake +++ /dev/null @@ -1,25 +0,0 @@ - -#============================================================================= -# Copyright 2002-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -find_program(CMAKE_MAKE_PROGRAM - NAMES devenv - PATHS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.0\\Setup\\VS;EnvironmentDirectory] - "c:/Program Files/Microsoft Visual Studio .NET/Common7/IDE" - "c:/Program Files/Microsoft Visual Studio.NET/Common7/IDE" - "/Program Files/Microsoft Visual Studio .NET/Common7/IDE/" - ) -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC70 1) -set(MSVC_VERSION 1300) diff --git a/Modules/CMakeVS8FindMake.cmake b/Modules/CMakeVS8FindMake.cmake deleted file mode 100644 index 31df026..0000000 --- a/Modules/CMakeVS8FindMake.cmake +++ /dev/null @@ -1,34 +0,0 @@ - -#============================================================================= -# Copyright 2004-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# VCExpress does not support cross compiling, which is necessary for Win CE -set( _CMAKE_MAKE_PROGRAM_NAMES devenv) -if(NOT CMAKE_CROSSCOMPILING) - set( _CMAKE_MAKE_PROGRAM_NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} VCExpress) -endif() - -find_program(CMAKE_MAKE_PROGRAM - NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} - HINTS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VS;EnvironmentDirectory] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup;Dbghelp_path] - "$ENV{ProgramFiles}/Microsoft Visual Studio 8/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio8/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 8/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio8/Common7/IDE" - "/Program Files/Microsoft Visual Studio 8/Common7/IDE/" - ) -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC80 1) -set(MSVC_VERSION 1400) diff --git a/Modules/CMakeVS9FindMake.cmake b/Modules/CMakeVS9FindMake.cmake deleted file mode 100644 index 35e9f98..0000000 --- a/Modules/CMakeVS9FindMake.cmake +++ /dev/null @@ -1,39 +0,0 @@ - -#============================================================================= -# Copyright 2007-2009 Kitware, Inc. -# -# Distributed under the OSI-approved BSD License (the "License"); -# see accompanying file Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even the -# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the License for more information. -#============================================================================= -# (To distribute this file outside of CMake, substitute the full -# License text for the above reference.) - -# VCExpress does not support cross compiling, which is necessary for Win CE -set( _CMAKE_MAKE_PROGRAM_NAMES devenv) -if(NOT CMAKE_CROSSCOMPILING) - set( _CMAKE_MAKE_PROGRAM_NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} VCExpress) -endif() - -find_program(CMAKE_MAKE_PROGRAM - NAMES ${_CMAKE_MAKE_PROGRAM_NAMES} - HINTS - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VS;EnvironmentDirectory] - [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup;Dbghelp_path] - "$ENV{ProgramFiles}/Microsoft Visual Studio 9.0/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio9.0/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio 9/Common7/IDE" - "$ENV{ProgramFiles}/Microsoft Visual Studio9/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 9.0/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio9.0/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio 9/Common7/IDE" - "$ENV{ProgramFiles} (x86)/Microsoft Visual Studio9/Common7/IDE" - "/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/" - "/Program Files/Microsoft Visual Studio 9/Common7/IDE/" - ) -mark_as_advanced(CMAKE_MAKE_PROGRAM) -set(MSVC90 1) -set(MSVC_VERSION 1500) diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h index 74d88f3..6e93609 100644 --- a/Source/cmGlobalGenerator.h +++ b/Source/cmGlobalGenerator.h @@ -203,7 +203,7 @@ public: /* * Determine what program to use for building the project. */ - void FindMakeProgram(cmMakefile*); + virtual void FindMakeProgram(cmMakefile*); ///! Find a target by name by searching the local generators. cmTarget* FindTarget(const char* project, const char* name, diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx index 741d591..29401c6 100644 --- a/Source/cmGlobalVisualStudio10Generator.cxx +++ b/Source/cmGlobalVisualStudio10Generator.cxx @@ -92,7 +92,6 @@ cmGlobalVisualStudio10Generator::cmGlobalVisualStudio10Generator( : cmGlobalVisualStudio8Generator(name, platformName, additionalPlatformDefinition) { - this->FindMakeProgramFile = "CMakeVS10FindMake.cmake"; std::string vc10Express; this->ExpressEdition = cmSystemTools::ReadRegistryValue( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\10.0\\Setup\\VC;" diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h index ad0aa6d..66440ea 100644 --- a/Source/cmGlobalVisualStudio10Generator.h +++ b/Source/cmGlobalVisualStudio10Generator.h @@ -118,5 +118,6 @@ private: bool MSBuildCommandInitialized; virtual std::string FindMSBuildCommand(); virtual std::string FindDevEnvCommand(); + virtual std::string GetVSMakeProgram() { return this->GetMSBuildCommand(); } }; #endif diff --git a/Source/cmGlobalVisualStudio11Generator.cxx b/Source/cmGlobalVisualStudio11Generator.cxx index d968c6d..f1d7312 100644 --- a/Source/cmGlobalVisualStudio11Generator.cxx +++ b/Source/cmGlobalVisualStudio11Generator.cxx @@ -112,7 +112,6 @@ cmGlobalVisualStudio11Generator::cmGlobalVisualStudio11Generator( : cmGlobalVisualStudio10Generator(name, platformName, additionalPlatformDefinition) { - this->FindMakeProgramFile = "CMakeVS11FindMake.cmake"; std::string vc11Express; this->ExpressEdition = cmSystemTools::ReadRegistryValue( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\11.0\\Setup\\VC;" diff --git a/Source/cmGlobalVisualStudio12Generator.cxx b/Source/cmGlobalVisualStudio12Generator.cxx index f3806df..edd5567 100644 --- a/Source/cmGlobalVisualStudio12Generator.cxx +++ b/Source/cmGlobalVisualStudio12Generator.cxx @@ -87,7 +87,6 @@ cmGlobalVisualStudio12Generator::cmGlobalVisualStudio12Generator( : cmGlobalVisualStudio11Generator(name, platformName, additionalPlatformDefinition) { - this->FindMakeProgramFile = "CMakeVS12FindMake.cmake"; std::string vc12Express; this->ExpressEdition = cmSystemTools::ReadRegistryValue( "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\12.0\\Setup\\VC;" diff --git a/Source/cmGlobalVisualStudio6Generator.cxx b/Source/cmGlobalVisualStudio6Generator.cxx index 08ea249..8651da7 100644 --- a/Source/cmGlobalVisualStudio6Generator.cxx +++ b/Source/cmGlobalVisualStudio6Generator.cxx @@ -32,7 +32,6 @@ std::string GetVS6TargetName(const std::string& targetName) cmGlobalVisualStudio6Generator::cmGlobalVisualStudio6Generator() { - this->FindMakeProgramFile = "CMakeVS6FindMake.cmake"; this->MSDevCommandInitialized = false; } diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h index 24f46b3..8fe5792 100644 --- a/Source/cmGlobalVisualStudio6Generator.h +++ b/Source/cmGlobalVisualStudio6Generator.h @@ -92,6 +92,7 @@ public: protected: virtual const char* GetIDEVersion() { return "6.0"; } private: + virtual std::string GetVSMakeProgram() { return this->GetMSDevCommand(); } void GenerateConfigurations(cmMakefile* mf); void WriteDSWFile(std::ostream& fout); void WriteDSWHeader(std::ostream& fout); diff --git a/Source/cmGlobalVisualStudio71Generator.cxx b/Source/cmGlobalVisualStudio71Generator.cxx index 2643719..61d3c4c 100644 --- a/Source/cmGlobalVisualStudio71Generator.cxx +++ b/Source/cmGlobalVisualStudio71Generator.cxx @@ -19,7 +19,6 @@ cmGlobalVisualStudio71Generator::cmGlobalVisualStudio71Generator( const char* platformName) : cmGlobalVisualStudio7Generator(platformName) { - this->FindMakeProgramFile = "CMakeVS71FindMake.cmake"; this->ProjectConfigurationSectionName = "ProjectConfiguration"; } diff --git a/Source/cmGlobalVisualStudio7Generator.cxx b/Source/cmGlobalVisualStudio7Generator.cxx index 08eff31..3d939f3 100644 --- a/Source/cmGlobalVisualStudio7Generator.cxx +++ b/Source/cmGlobalVisualStudio7Generator.cxx @@ -20,7 +20,6 @@ cmGlobalVisualStudio7Generator::cmGlobalVisualStudio7Generator( const char* platformName) { - this->FindMakeProgramFile = "CMakeVS7FindMake.cmake"; this->IntelProjectVersion = 0; this->DevEnvCommandInitialized = false; diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h index d272fa0..c7b0081 100644 --- a/Source/cmGlobalVisualStudio7Generator.h +++ b/Source/cmGlobalVisualStudio7Generator.h @@ -173,6 +173,7 @@ private: char* IntelProjectVersion; std::string DevEnvCommand; bool DevEnvCommandInitialized; + virtual std::string GetVSMakeProgram() { return this->GetDevEnvCommand(); } }; #define CMAKE_CHECK_BUILD_SYSTEM_TARGET "ZERO_CHECK" diff --git a/Source/cmGlobalVisualStudio8Generator.cxx b/Source/cmGlobalVisualStudio8Generator.cxx index 949dd1b..69b0a7a 100644 --- a/Source/cmGlobalVisualStudio8Generator.cxx +++ b/Source/cmGlobalVisualStudio8Generator.cxx @@ -94,7 +94,6 @@ cmGlobalVisualStudio8Generator::cmGlobalVisualStudio8Generator( const char* additionalPlatformDefinition) : cmGlobalVisualStudio71Generator(platformName) { - this->FindMakeProgramFile = "CMakeVS8FindMake.cmake"; this->ProjectConfigurationSectionName = "ProjectConfigurationPlatforms"; this->Name = name; diff --git a/Source/cmGlobalVisualStudio9Generator.cxx b/Source/cmGlobalVisualStudio9Generator.cxx index aadf982..ccc27ad 100644 --- a/Source/cmGlobalVisualStudio9Generator.cxx +++ b/Source/cmGlobalVisualStudio9Generator.cxx @@ -101,7 +101,6 @@ cmGlobalVisualStudio9Generator::cmGlobalVisualStudio9Generator( : cmGlobalVisualStudio8Generator(name, platformName, additionalPlatformDefinition) { - this->FindMakeProgramFile = "CMakeVS9FindMake.cmake"; } //---------------------------------------------------------------------------- diff --git a/Source/cmGlobalVisualStudioGenerator.cxx b/Source/cmGlobalVisualStudioGenerator.cxx index af80070..7afcfa7 100644 --- a/Source/cmGlobalVisualStudioGenerator.cxx +++ b/Source/cmGlobalVisualStudioGenerator.cxx @@ -500,6 +500,19 @@ void cmGlobalVisualStudioGenerator::ComputeVSTargetDepends(cmTarget& target) } //---------------------------------------------------------------------------- +void cmGlobalVisualStudioGenerator::FindMakeProgram(cmMakefile* mf) +{ + // Visual Studio generators know how to lookup their build tool + // directly instead of needing a helper module to do it, so we + // do not actually need to put CMAKE_MAKE_PROGRAM into the cache. + if(cmSystemTools::IsOff(mf->GetDefinition("CMAKE_MAKE_PROGRAM"))) + { + mf->AddDefinition("CMAKE_MAKE_PROGRAM", + this->GetVSMakeProgram().c_str()); + } +} + +//---------------------------------------------------------------------------- void cmGlobalVisualStudioGenerator::AddPlatformDefinitions(cmMakefile* mf) { if(this->AdditionalPlatformDefinition) diff --git a/Source/cmGlobalVisualStudioGenerator.h b/Source/cmGlobalVisualStudioGenerator.h index ce03a0e..da2d021 100644 --- a/Source/cmGlobalVisualStudioGenerator.h +++ b/Source/cmGlobalVisualStudioGenerator.h @@ -82,6 +82,8 @@ public: }; class OrderedTargetDependSet; + virtual void FindMakeProgram(cmMakefile*); + protected: // Does this VS version link targets to each other if there are // dependencies in the SLN file? This was done for VS versions @@ -107,6 +109,7 @@ protected: const char* AdditionalPlatformDefinition; private: + virtual std::string GetVSMakeProgram() = 0; void PrintCompilerAdvice(std::ostream&, std::string, const char*) {} void ComputeTargetObjects(cmGeneratorTarget* gt) const; -- cgit v0.12 From 4cce44b6c50a40ee13f423ae311d5db5a66a13f4 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 15 Nov 2013 15:34:54 -0500 Subject: Help: Document the CMAKE_MAKE_PROGRAM variable in more detail Explain how it is set for each group of generators. Also explain the build-time selection behavior used by Visual Studio generators. --- Help/variable/CMAKE_MAKE_PROGRAM.rst | 53 ++++++++++++++++++++++++++++++++---- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/Help/variable/CMAKE_MAKE_PROGRAM.rst b/Help/variable/CMAKE_MAKE_PROGRAM.rst index b546815..0c851ad 100644 --- a/Help/variable/CMAKE_MAKE_PROGRAM.rst +++ b/Help/variable/CMAKE_MAKE_PROGRAM.rst @@ -1,10 +1,51 @@ CMAKE_MAKE_PROGRAM ------------------ -Tool used for the actual build process. +Tool that can launch the native build system. +The value may be the full path to an executable or just the tool +name if it is expected to be in the ``PATH``. -This variable is set to the program that will be needed to build the -output of CMake. If the generator selected was Visual Studio 6, the -CMAKE_MAKE_PROGRAM will be set to msdev, for Unix Makefiles it will be -set to make or gmake, and for Visual Studio 7 it set to devenv. For -NMake Makefiles the value is nmake. +The tool selected depends on the :variable:`CMAKE_GENERATOR` used +to configure the project: + +* The Makefile generators set this to ``make``, ``gmake``, or + a generator-specific tool (e.g. ``nmake`` for "NMake Makefiles"). + + These generators store ``CMAKE_MAKE_PROGRAM`` in the CMake cache + so that it may be edited by the user. + +* The Ninja generator sets this to ``ninja``. + + This generator stores ``CMAKE_MAKE_PROGRAM`` in the CMake cache + so that it may be edited by the user. + +* The Xcode generator sets this to ``xcodebuild`` (or possibly an + otherwise undocumented ``cmakexbuild`` wrapper implementing some + workarounds). + + This generator stores ``CMAKE_MAKE_PROGRAM`` in the CMake cache + so that it may be edited by the user. + +* The Visual Studio generators set this to the full path to + ``MSBuild.exe`` (VS >= 10), ``devenv.com`` (VS 7,8,9), + ``VCExpress.exe`` (VS Express 8,9), or ``msdev.exe`` (VS 6). + + These generators prefer to lookup the build tool at build time + rather than to store ``CMAKE_MAKE_PROGRAM`` in the CMake cache + ahead of time. This is because the tools are version-specific + and can be located using the Windows Registry. It is also + necessary because the proper build tool may depend on the + project content (e.g. the Intel Fortran plugin to VS 10 and 11 + requires ``devenv.com`` to build its ``.vfproj`` project files + even though ``MSBuild.exe`` is normally preferred to support + the :variable:`CMAKE_GENERATOR_TOOLSET`). + + For compatibility with versions of CMake prior to 3.0, if + a user or project explicitly adds ``CMAKE_MAKE_PROGRAM`` to + the CMake cache then CMake will use the specified value if + possible. + +The ``CMAKE_MAKE_PROGRAM`` variable is set for use by project code. +The value is also used by the :manual:`cmake(1)` ``--build`` and +:manual:`ctest(1)` ``--build-and-test`` tools to launch the native +build process. -- cgit v0.12