summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2012-03-13 13:22:24 (GMT)
committerBrad King <brad.king@kitware.com>2012-03-16 14:18:01 (GMT)
commitc68cc0661218c62f32d11cb600183e645c81a3de (patch)
treef5f9ed60ee709ba8d5adc97e38e41dbfe4aab9cf
parent48eb7fc7d7b3fa5570a7b32968fa2cff07bf6fe7 (diff)
parent3a53005f7dd5e582b855ef1f3c0e6814ce7d024a (diff)
downloadCMake-c68cc0661218c62f32d11cb600183e645c81a3de.zip
CMake-c68cc0661218c62f32d11cb600183e645c81a3de.tar.gz
CMake-c68cc0661218c62f32d11cb600183e645c81a3de.tar.bz2
Merge branch 'object-library' into ninja-object-library
-rw-r--r--Docs/cmake-mode.el4
-rw-r--r--Modules/CMakeCCompilerId.c.in6
-rw-r--r--Modules/CMakeCXXCompilerId.cpp.in6
-rw-r--r--Modules/CMakeFindPackageMode.cmake3
-rw-r--r--Modules/CMakeGenericSystem.cmake3
-rw-r--r--Modules/CMakePackageConfigHelpers.cmake189
-rw-r--r--Modules/CPack.cmake198
-rw-r--r--Modules/CPackBundle.cmake29
-rw-r--r--Modules/CPackCygwin.cmake33
-rw-r--r--Modules/CPackDMG.cmake58
-rw-r--r--Modules/CPackNSIS.cmake19
-rw-r--r--Modules/CPackPackageMaker.cmake25
-rw-r--r--Modules/CheckCCompilerFlag.cmake1
-rw-r--r--Modules/CheckCXXCompilerFlag.cmake1
-rw-r--r--Modules/DeployQt4.cmake78
-rw-r--r--Modules/FindGnuplot.cmake2
-rw-r--r--Modules/FindHSPELL.cmake5
-rw-r--r--Modules/FindImageMagick.cmake4
-rw-r--r--Modules/FindOpenMP.cmake12
-rw-r--r--Modules/FindOpenSceneGraph.cmake10
-rw-r--r--Modules/FindPythonInterp.cmake55
-rw-r--r--Modules/FindPythonLibs.cmake70
-rw-r--r--Modules/FindQt3.cmake91
-rw-r--r--Modules/GenerateExportHeader.cmake46
-rw-r--r--Modules/Platform/Windows-Borland-C.cmake3
-rw-r--r--Modules/Platform/Windows-Borland-CXX.cmake3
-rw-r--r--Modules/Platform/Windows-Embarcadero-C.cmake3
-rw-r--r--Modules/Platform/Windows-Embarcadero-CXX.cmake3
-rw-r--r--Modules/Platform/Windows-Embarcadero.cmake (renamed from Modules/Platform/Windows-Borland.cmake)58
-rw-r--r--Modules/UseSWIG.cmake13
-rw-r--r--Modules/WriteBasicConfigVersionFile.cmake27
-rw-r--r--Source/CMakeLists.txt2
-rw-r--r--Source/CPack/cmCPackDocumentVariables.cxx64
-rw-r--r--Source/CPack/cmCPackDragNDropGenerator.cxx9
-rw-r--r--Source/CTest/cmCTestBuildCommand.h6
-rw-r--r--Source/CTest/cmCTestConfigureCommand.h6
-rw-r--r--Source/CTest/cmCTestCoverageCommand.h6
-rw-r--r--Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h6
-rw-r--r--Source/CTest/cmCTestMemCheckCommand.h6
-rw-r--r--Source/CTest/cmCTestReadCustomFilesCommand.h6
-rw-r--r--Source/CTest/cmCTestRunScriptCommand.h6
-rw-r--r--Source/CTest/cmCTestSleepCommand.h6
-rw-r--r--Source/CTest/cmCTestStartCommand.h6
-rw-r--r--Source/CTest/cmCTestSubmitCommand.h6
-rw-r--r--Source/CTest/cmCTestTestCommand.h6
-rw-r--r--Source/CTest/cmCTestTestHandler.cxx24
-rw-r--r--Source/CTest/cmCTestUpdateCommand.h6
-rw-r--r--Source/CTest/cmCTestUploadCommand.h6
-rw-r--r--Source/cmAddCustomCommandCommand.h6
-rw-r--r--Source/cmAddCustomTargetCommand.h6
-rw-r--r--Source/cmAddDefinitionsCommand.h6
-rw-r--r--Source/cmAddDependenciesCommand.h6
-rw-r--r--Source/cmAddExecutableCommand.h6
-rw-r--r--Source/cmAddLibraryCommand.cxx14
-rw-r--r--Source/cmAddLibraryCommand.h6
-rw-r--r--Source/cmAddSubDirectoryCommand.h6
-rw-r--r--Source/cmAddTestCommand.h6
-rw-r--r--Source/cmAuxSourceDirectoryCommand.h6
-rw-r--r--Source/cmBreakCommand.h8
-rw-r--r--Source/cmBuildCommand.h6
-rw-r--r--Source/cmBuildNameCommand.h10
-rw-r--r--Source/cmCMakeMinimumRequired.h8
-rw-r--r--Source/cmCMakePolicyCommand.h8
-rw-r--r--Source/cmCommand.h14
-rw-r--r--Source/cmCommandArgumentParserHelper.h1
-rw-r--r--Source/cmComputeLinkDepends.cxx19
-rw-r--r--Source/cmComputeLinkInformation.cxx1
-rw-r--r--Source/cmComputeTargetDepends.cxx2
-rw-r--r--Source/cmConfigureFileCommand.h8
-rw-r--r--Source/cmCoreTryCompile.cxx4
-rw-r--r--Source/cmCreateTestSourceList.cxx2
-rw-r--r--Source/cmCreateTestSourceList.h6
-rw-r--r--Source/cmDefinePropertyCommand.h6
-rw-r--r--Source/cmDepends.cxx7
-rw-r--r--Source/cmDependsFortran.cxx12
-rw-r--r--Source/cmDocumentVariables.cxx56
-rw-r--r--Source/cmElseCommand.h8
-rw-r--r--Source/cmElseIfCommand.h8
-rw-r--r--Source/cmEnableLanguageCommand.h6
-rw-r--r--Source/cmEnableTestingCommand.h6
-rw-r--r--Source/cmEndForEachCommand.h8
-rw-r--r--Source/cmEndFunctionCommand.h8
-rw-r--r--Source/cmEndIfCommand.h8
-rw-r--r--Source/cmEndMacroCommand.h8
-rw-r--r--Source/cmEndWhileCommand.cxx17
-rw-r--r--Source/cmEndWhileCommand.h10
-rw-r--r--Source/cmExecProgramCommand.h10
-rw-r--r--Source/cmExecuteProcessCommand.h8
-rw-r--r--Source/cmExportCommand.cxx8
-rw-r--r--Source/cmExportCommand.h6
-rw-r--r--Source/cmExportLibraryDependencies.h8
-rw-r--r--Source/cmExprParserHelper.cxx6
-rw-r--r--Source/cmExprParserHelper.h3
-rw-r--r--Source/cmExtraCodeBlocksGenerator.cxx4
-rw-r--r--Source/cmExtraEclipseCDT4Generator.cxx4
-rw-r--r--Source/cmFLTKWrapUICommand.h6
-rw-r--r--Source/cmFileCommand.cxx33
-rw-r--r--Source/cmFileCommand.h8
-rw-r--r--Source/cmFindBase.cxx4
-rw-r--r--Source/cmFindBase.h2
-rw-r--r--Source/cmFindFileCommand.h4
-rw-r--r--Source/cmFindLibraryCommand.h6
-rw-r--r--Source/cmFindPackageCommand.cxx273
-rw-r--r--Source/cmFindPackageCommand.h12
-rw-r--r--Source/cmFindPathCommand.h6
-rw-r--r--Source/cmFindProgramCommand.cxx3
-rw-r--r--Source/cmFindProgramCommand.h6
-rw-r--r--Source/cmForEachCommand.h19
-rw-r--r--Source/cmFunctionBlocker.h5
-rw-r--r--Source/cmFunctionCommand.cxx10
-rw-r--r--Source/cmFunctionCommand.h19
-rw-r--r--Source/cmGeneratorTarget.cxx95
-rw-r--r--Source/cmGeneratorTarget.h58
-rw-r--r--Source/cmGetCMakePropertyCommand.h8
-rw-r--r--Source/cmGetDirectoryPropertyCommand.h8
-rw-r--r--Source/cmGetFilenameComponentCommand.h8
-rw-r--r--Source/cmGetPropertyCommand.h8
-rw-r--r--Source/cmGetSourceFilePropertyCommand.h6
-rw-r--r--Source/cmGetTargetPropertyCommand.h6
-rw-r--r--Source/cmGetTestPropertyCommand.h6
-rw-r--r--Source/cmGlobalGenerator.cxx57
-rw-r--r--Source/cmGlobalGenerator.h13
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.cxx38
-rw-r--r--Source/cmGlobalUnixMakefileGenerator3.h2
-rw-r--r--Source/cmGlobalVisualStudio10Generator.h2
-rw-r--r--Source/cmGlobalVisualStudio6Generator.h2
-rw-r--r--Source/cmGlobalVisualStudio7Generator.h2
-rw-r--r--Source/cmGlobalVisualStudioGenerator.cxx70
-rw-r--r--Source/cmGlobalVisualStudioGenerator.h2
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx35
-rw-r--r--Source/cmGlobalXCodeGenerator.h5
-rw-r--r--Source/cmIfCommand.h19
-rw-r--r--Source/cmIncludeCommand.h8
-rw-r--r--Source/cmIncludeDirectoryCommand.h6
-rw-r--r--Source/cmIncludeExternalMSProjectCommand.h6
-rw-r--r--Source/cmIncludeRegularExpressionCommand.h6
-rw-r--r--Source/cmInstallCommand.cxx11
-rw-r--r--Source/cmInstallCommand.h6
-rw-r--r--Source/cmInstallDirectoryGenerator.cxx2
-rw-r--r--Source/cmInstallExportGenerator.cxx5
-rw-r--r--Source/cmInstallFilesCommand.h8
-rw-r--r--Source/cmInstallFilesGenerator.cxx6
-rw-r--r--Source/cmInstallGenerator.cxx18
-rw-r--r--Source/cmInstallGenerator.h3
-rw-r--r--Source/cmInstallProgramsCommand.h8
-rw-r--r--Source/cmInstallTargetGenerator.cxx27
-rw-r--r--Source/cmInstallTargetsCommand.h8
-rw-r--r--Source/cmInstallType.h29
-rw-r--r--Source/cmLinkDirectoriesCommand.h6
-rw-r--r--Source/cmLinkLibrariesCommand.h8
-rw-r--r--Source/cmListCommand.h8
-rw-r--r--Source/cmLoadCacheCommand.h6
-rw-r--r--Source/cmLoadCommandCommand.cxx6
-rw-r--r--Source/cmLoadCommandCommand.h6
-rw-r--r--Source/cmLocalGenerator.cxx30
-rw-r--r--Source/cmLocalGenerator.h29
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.cxx65
-rw-r--r--Source/cmLocalUnixMakefileGenerator3.h52
-rw-r--r--Source/cmLocalVisualStudio6Generator.cxx118
-rw-r--r--Source/cmLocalVisualStudio6Generator.h4
-rw-r--r--Source/cmLocalVisualStudio7Generator.cxx71
-rw-r--r--Source/cmLocalVisualStudio7Generator.h9
-rw-r--r--Source/cmLocalVisualStudioGenerator.cxx90
-rw-r--r--Source/cmLocalVisualStudioGenerator.h12
-rw-r--r--Source/cmLocalXCodeGenerator.cxx13
-rw-r--r--Source/cmLocalXCodeGenerator.h3
-rw-r--r--Source/cmMacroCommand.cxx10
-rw-r--r--Source/cmMacroCommand.h19
-rw-r--r--Source/cmMakeDirectoryCommand.h10
-rw-r--r--Source/cmMakefile.cxx29
-rw-r--r--Source/cmMakefile.h8
-rw-r--r--Source/cmMakefileLibraryTargetGenerator.cxx26
-rw-r--r--Source/cmMakefileLibraryTargetGenerator.h1
-rw-r--r--Source/cmMakefileTargetGenerator.cxx142
-rw-r--r--Source/cmMakefileTargetGenerator.h8
-rw-r--r--Source/cmMarkAsAdvancedCommand.h8
-rw-r--r--Source/cmMathCommand.h13
-rw-r--r--Source/cmMessageCommand.h8
-rw-r--r--Source/cmOptionCommand.h8
-rw-r--r--Source/cmOutputRequiredFilesCommand.h8
-rw-r--r--Source/cmPolicies.h63
-rw-r--r--Source/cmProjectCommand.cxx18
-rw-r--r--Source/cmProjectCommand.h11
-rw-r--r--Source/cmPropertyDefinition.h37
-rw-r--r--Source/cmQTWrapCPPCommand.h6
-rw-r--r--Source/cmQTWrapUICommand.h6
-rw-r--r--Source/cmRemoveCommand.h10
-rw-r--r--Source/cmRemoveDefinitionsCommand.h6
-rw-r--r--Source/cmReturnCommand.h8
-rw-r--r--Source/cmSeparateArgumentsCommand.h8
-rw-r--r--Source/cmSetCommand.h8
-rw-r--r--Source/cmSetDirectoryPropertiesCommand.h8
-rw-r--r--Source/cmSetPropertyCommand.h8
-rw-r--r--Source/cmSetSourceFilesPropertiesCommand.h6
-rw-r--r--Source/cmSetTargetPropertiesCommand.h6
-rw-r--r--Source/cmSetTestsPropertiesCommand.h6
-rw-r--r--Source/cmSiteNameCommand.h8
-rw-r--r--Source/cmSourceGroup.cxx6
-rw-r--r--Source/cmSourceGroup.h1
-rw-r--r--Source/cmSourceGroupCommand.h6
-rw-r--r--Source/cmStringCommand.h8
-rw-r--r--Source/cmSubdirCommand.h8
-rw-r--r--Source/cmSubdirDependsCommand.h8
-rw-r--r--Source/cmTarget.cxx93
-rw-r--r--Source/cmTarget.h7
-rw-r--r--Source/cmTargetLinkLibrariesCommand.cxx10
-rw-r--r--Source/cmTargetLinkLibrariesCommand.h6
-rw-r--r--Source/cmTryCompileCommand.h6
-rw-r--r--Source/cmTryRunCommand.h6
-rw-r--r--Source/cmUnsetCommand.h8
-rw-r--r--Source/cmUseMangledMesaCommand.h10
-rw-r--r--Source/cmUtilitySourceCommand.h8
-rw-r--r--Source/cmVariableRequiresCommand.h8
-rw-r--r--Source/cmVariableWatchCommand.h8
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx95
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h4
-rw-r--r--Source/cmVisualStudioGeneratorOptions.cxx14
-rw-r--r--Source/cmVisualStudioGeneratorOptions.h1
-rw-r--r--Source/cmWhileCommand.h19
-rw-r--r--Source/cmWriteFileCommand.h10
-rw-r--r--Source/cmake.cxx18
-rw-r--r--Source/cmake.h84
-rw-r--r--Source/cmakexbuild.cxx2
-rw-r--r--Source/kwsys/kwsysDateStamp.cmake4
-rw-r--r--Templates/CPackConfig.cmake.in33
-rw-r--r--Tests/CMakeCommands/build_command/RunCMake.cmake86
-rw-r--r--Tests/CMakeLists.txt115
-rw-r--r--Tests/CMakeOnly/AllFindModules/CMakeLists.txt42
-rw-r--r--Tests/CMakeOnly/CMakeLists.txt6
-rw-r--r--Tests/CMakeOnly/ProjectInclude/CMakeLists.txt4
-rw-r--r--Tests/CMakeOnly/ProjectInclude/include.cmake1
-rw-r--r--Tests/CMakeOnly/Test.cmake.in3
-rw-r--r--Tests/CMakeTests/CMakeLists.txt7
-rw-r--r--Tests/CMakeTests/CheckSourceTreeTest.cmake.in87
-rw-r--r--Tests/CMakeTests/GetProperty-Bad-Argument.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-Bad-Directory.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-Bad-Scope.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-Bad-Target.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-Bad-Test.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-Doc-Properties.cmake10
-rw-r--r--Tests/CMakeTests/GetProperty-Global-Name.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-Missing-Argument.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-No-Cache.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-No-Property.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-No-Source.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-No-Target.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-No-Test.cmake1
-rw-r--r--Tests/CMakeTests/GetProperty-Variable-Name.cmake1
-rw-r--r--Tests/CMakeTests/GetPropertyTest.cmake.in98
-rw-r--r--Tests/CMakeTests/While-Endwhile-Alone-Args.cmake1
-rw-r--r--Tests/CMakeTests/While-Endwhile-Alone.cmake1
-rw-r--r--Tests/CMakeTests/While-Endwhile-Mismatch.cmake2
-rw-r--r--Tests/CMakeTests/While-Missing-Argument.cmake1
-rw-r--r--Tests/CMakeTests/While-Missing-Endwhile.cmake1
-rw-r--r--Tests/CMakeTests/WhileTest.cmake.in53
-rw-r--r--Tests/CTestUpdateCVS.cmake.in13
-rw-r--r--Tests/CTestUpdateHG.cmake.in2
-rw-r--r--Tests/ExternalProject/CMakeLists.txt12
-rw-r--r--Tests/FindPackageTest/CMakeLists.txt37
-rw-r--r--Tests/FindPackageTest/RelocatableConfig.cmake.in5
-rw-r--r--Tests/Qt4Deploy/CMakeLists.txt70
-rw-r--r--Tests/Qt4Deploy/testdeploy.cpp29
-rw-r--r--Tests/README13
-rw-r--r--Tests/RunCMake/CMakeLists.txt44
-rw-r--r--Tests/RunCMake/RunCMake.cmake69
-rw-r--r--Tests/RunCMake/build_command/CMakeLists.txt (renamed from Tests/CMakeCommands/build_command/CMakeLists.txt)7
-rw-r--r--Tests/RunCMake/build_command/ErrorsOFF-stderr.txt1
-rw-r--r--Tests/RunCMake/build_command/ErrorsOFF-stdout.txt1
-rw-r--r--Tests/RunCMake/build_command/ErrorsOFF.cmake1
-rw-r--r--Tests/RunCMake/build_command/ErrorsON-result.txt1
-rw-r--r--Tests/RunCMake/build_command/ErrorsON-stderr.txt12
-rw-r--r--Tests/RunCMake/build_command/ErrorsON-stdout.txt1
-rw-r--r--Tests/RunCMake/build_command/ErrorsON.cmake1
-rw-r--r--Tests/RunCMake/build_command/RunCMakeTest.cmake4
-rw-r--r--Tests/RunCMake/find_package/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/find_package/MissingConfig-stderr.txt19
-rw-r--r--Tests/RunCMake/find_package/MissingConfig.cmake2
-rw-r--r--Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt10
-rw-r--r--Tests/RunCMake/find_package/MissingConfigOneName.cmake1
-rw-r--r--Tests/RunCMake/find_package/MissingConfigRequired-result.txt1
-rw-r--r--Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt13
-rw-r--r--Tests/RunCMake/find_package/MissingConfigRequired.cmake2
-rw-r--r--Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt13
-rw-r--r--Tests/RunCMake/find_package/MissingConfigVersion.cmake1
-rw-r--r--Tests/RunCMake/find_package/MissingModule-stderr.txt26
-rw-r--r--Tests/RunCMake/find_package/MissingModule.cmake2
-rw-r--r--Tests/RunCMake/find_package/MissingModuleRequired-result.txt1
-rw-r--r--Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt21
-rw-r--r--Tests/RunCMake/find_package/MissingModuleRequired.cmake2
-rw-r--r--Tests/RunCMake/find_package/MissingNormal-stderr.txt23
-rw-r--r--Tests/RunCMake/find_package/MissingNormal.cmake2
-rw-r--r--Tests/RunCMake/find_package/MissingNormalRequired-result.txt1
-rw-r--r--Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt17
-rw-r--r--Tests/RunCMake/find_package/MissingNormalRequired.cmake2
-rw-r--r--Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt17
-rw-r--r--Tests/RunCMake/find_package/MissingNormalVersion.cmake1
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt30
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake3
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt29
-rw-r--r--Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake2
-rw-r--r--Tests/RunCMake/find_package/MixedModeOptions-result.txt1
-rw-r--r--Tests/RunCMake/find_package/MixedModeOptions-stderr.txt14
-rw-r--r--Tests/RunCMake/find_package/MixedModeOptions.cmake1
-rw-r--r--Tests/RunCMake/find_package/RunCMakeTest.cmake14
-rw-r--r--Tests/SBCS/CMakeLists.txt6
-rw-r--r--Tests/SBCS/SBCS.cxx22
-rw-r--r--Utilities/Release/Cygwin/cygwin-setup.hint.in8
-rw-r--r--Utilities/cmcurl/CMakeLists.txt4
-rwxr-xr-xbootstrap19
-rw-r--r--cmake.1112
310 files changed, 3361 insertions, 2134 deletions
diff --git a/Docs/cmake-mode.el b/Docs/cmake-mode.el
index 4418bfa..9517455 100644
--- a/Docs/cmake-mode.el
+++ b/Docs/cmake-mode.el
@@ -68,9 +68,9 @@ set the path with these commands:
"\\|" "[ \t\r\n]"
"\\)*"))
(defconst cmake-regex-block-open
- "^\\(IF\\|MACRO\\|FOREACH\\|ELSE\\|ELSEIF\\|WHILE\\|FUNCTION\\)$")
+ "^\\([iI][fF]\\|[mM][aA][cC][rR][oO]\\|[fF][oO][rR][eE][aA][cC][hH]\\|[eE][lL][sS][eE]\\|[eE][lL][sS][eE][iI][fF]\\|[wW][hH][iI][lL][eE]\\|[fF][uU][nN][cC][tT][iI][oO][nN]\\)$")
(defconst cmake-regex-block-close
- "^[ \t]*\\(ENDIF\\|ENDFOREACH\\|ENDMACRO\\|ELSE\\|ELSEIF\\|ENDWHILE\\|ENDFUNCTION\\)[ \t]*(")
+ "^[ \t]*\\([eE][nN][dD][iI][fF]\\|[eE][nN][dD][fF][oO][rR][eE][aA][cC][hH]\\|[eE][nN][dD][mM][aA][cC][rR][oO]\\|[eE][lL][sS][eE]\\|[eE][lL][sS][eE][iI][fF]\\|[eE][nN][dD][wW][hH][iI][lL][eE]\\|[eE][nN][dD][fF][uU][nN][cC][tT][iI][oO][nN]\\)[ \t]*(")
;------------------------------------------------------------------------------
diff --git a/Modules/CMakeCCompilerId.c.in b/Modules/CMakeCCompilerId.c.in
index b0f5eb6..06aa9bf 100644
--- a/Modules/CMakeCCompilerId.c.in
+++ b/Modules/CMakeCCompilerId.c.in
@@ -26,6 +26,12 @@
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF)
+
#elif defined(__BORLANDC__)
# define COMPILER_ID "Borland"
/* __BORLANDC__ = 0xVRR */
diff --git a/Modules/CMakeCXXCompilerId.cpp.in b/Modules/CMakeCXXCompilerId.cpp.in
index 927f7f4..95fc852 100644
--- a/Modules/CMakeCXXCompilerId.cpp.in
+++ b/Modules/CMakeCXXCompilerId.cpp.in
@@ -28,6 +28,12 @@
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
+#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
+# define COMPILER_ID "Embarcadero"
+# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
+# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
+# define COMPILER_VERSION_PATCH HEX(__CODEGEARC_VERSION__ & 0xFFFF)
+
#elif defined(__BORLANDC__)
# define COMPILER_ID "Borland"
/* __BORLANDC__ = 0xVRR */
diff --git a/Modules/CMakeFindPackageMode.cmake b/Modules/CMakeFindPackageMode.cmake
index 4296577..59c7ba5 100644
--- a/Modules/CMakeFindPackageMode.cmake
+++ b/Modules/CMakeFindPackageMode.cmake
@@ -71,7 +71,8 @@ if(UNIX)
# use the file utility to check whether itself is 64 bit:
find_program(FILE_EXECUTABLE file)
if(FILE_EXECUTABLE)
- execute_process(COMMAND "${FILE_EXECUTABLE}" "${FILE_EXECUTABLE}" OUTPUT_VARIABLE fileOutput ERROR_QUIET)
+ get_filename_component(FILE_ABSPATH "${FILE_EXECUTABLE}" ABSOLUTE)
+ execute_process(COMMAND "${FILE_ABSPATH}" "${FILE_ABSPATH}" OUTPUT_VARIABLE fileOutput ERROR_QUIET)
if("${fileOutput}" MATCHES "64-bit")
set(CMAKE_SIZEOF_VOID_P 8)
endif()
diff --git a/Modules/CMakeGenericSystem.cmake b/Modules/CMakeGenericSystem.cmake
index 6cd8fe6..ee8040e 100644
--- a/Modules/CMakeGenericSystem.cmake
+++ b/Modules/CMakeGenericSystem.cmake
@@ -39,6 +39,8 @@ SET_PROPERTY(GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS TRUE)
SET (CMAKE_SKIP_RPATH "NO" CACHE BOOL
"If set, runtime paths are not added when using shared libraries.")
+SET (CMAKE_SKIP_INSTALL_RPATH "NO" CACHE BOOL
+ "If set, runtime paths are not added when installing shared libraries, but are added when building.")
SET(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
@@ -168,5 +170,6 @@ ENDIF(CMAKE_HOST_UNIX)
MARK_AS_ADVANCED(
CMAKE_SKIP_RPATH
+ CMAKE_SKIP_INSTALL_RPATH
CMAKE_VERBOSE_MAKEFILE
)
diff --git a/Modules/CMakePackageConfigHelpers.cmake b/Modules/CMakePackageConfigHelpers.cmake
new file mode 100644
index 0000000..b174e98
--- /dev/null
+++ b/Modules/CMakePackageConfigHelpers.cmake
@@ -0,0 +1,189 @@
+# - CONFIGURE_PACKAGE_CONFIG_FILE(), WRITE_BASIC_PACKAGE_VERSION_FILE()
+#
+# CONFIGURE_PACKAGE_CONFIG_FILE(<input> <output> INSTALL_DESTINATION <path>
+# [PATH_VARS <var1> <var2> ... <varN>]
+# [NO_SET_AND_CHECK_MACRO] )
+#
+# CONFIGURE_PACKAGE_CONFIG_FILE() should be used instead of the plain
+# CONFIGURE_FILE() command when creating the <Name>Config.cmake or <Name>-config.cmake
+# file for installing a project or library. It helps making the resulting package
+# relocatable by avoiding hardcoded paths in the installed Config.cmake file.
+#
+# In a FooConfig.cmake file there may be code like this to make the
+# install destinations know to the using project:
+# set(FOO_INCLUDE_DIR "@CMAKE_INSTALL_FULL_INCLUDEDIR@" )
+# set(FOO_DATA_DIR "@CMAKE_INSTALL_PREFIX@/@RELATIVE_DATA_INSTALL_DIR@" )
+# set(FOO_ICONS_DIR "@CMAKE_INSTALL_PREFIX@/share/icons" )
+# ...logic to determine installedPrefix from the own location...
+# set(FOO_CONFIG_DIR "${installedPrefix}/@CONFIG_INSTALL_DIR@" )
+# All 4 options shown above are not sufficient, since the first 3 hardcode
+# the absolute directory locations, and the 4th case works only if the logic
+# to determine the installedPrefix is correct, and if CONFIG_INSTALL_DIR contains
+# a relative path, which in general cannot be guaranteed.
+# This has the effect that the resulting FooConfig.cmake file would work poorly
+# under Windows and OSX, where users are used to choose the install location
+# of a binary package at install time, independent from how CMAKE_INSTALL_PREFIX
+# was set at build/cmake time.
+#
+# Using CONFIGURE_PACKAGE_CONFIG_FILE() helps. If used correctly, it makes the
+# resulting FooConfig.cmake file relocatable.
+# Usage:
+# 1. write a FooConfig.cmake.in file as you are used to
+# 2. insert a line containing only the string "@PACKAGE_INIT@"
+# 3. instead of SET(FOO_DIR "@SOME_INSTALL_DIR@"), use SET(FOO_DIR "@PACKAGE_SOME_INSTALL_DIR@")
+# (this must be after the @PACKAGE_INIT@ line)
+# 4. instead of using the normal CONFIGURE_FILE(), use CONFIGURE_PACKAGE_CONFIG_FILE()
+#
+# The <input> and <output> arguments are the input and output file, the same way
+# as in CONFIGURE_FILE().
+#
+# The <path> given to INSTALL_DESTINATION must be the destination where the FooConfig.cmake
+# file will be installed to. This can either be a relative or absolute path, both work.
+#
+# The variables <var1> to <varN> given as PATH_VARS are the variables which contain
+# install destinations. For each of them the macro will create a helper variable
+# PACKAGE_<var...>. These helper variables must be used
+# in the FooConfig.cmake.in file for setting the installed location. They are calculated
+# by CONFIGURE_PACKAGE_CONFIG_FILE() so that they are always relative to the
+# installed location of the package. This works both for relative and also for absolute locations.
+# For absolute locations it works only if the absolute location is a subdirectory
+# of CMAKE_INSTALL_PREFIX.
+#
+# By default configure_package_config_file() also generates a macro set_and_check()
+# into the FooConfig.cmake file. This should be used instead of the normal set()
+# command for setting directories and file locations. Additionally to setting the
+# variable it also checks that the referenced file or directory actually exists
+# and fails with a FATAL_ERROR otherwise. This makes sure that the created
+# FooConfig.cmake file does not contain wrong references.
+# When using the NO_SET_AND_CHECK_MACRO, this macro is not generated into the
+# FooConfig.cmake file.
+#
+# For an example see below the documentation for WRITE_BASIC_PACKAGE_VERSION_FILE().
+#
+#
+# WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion) )
+#
+# Writes a file for use as <package>ConfigVersion.cmake file to <filename>.
+# See the documentation of FIND_PACKAGE() for details on this.
+# filename is the output filename, it should be in the build tree.
+# major.minor.patch is the version number of the project to be installed
+# The COMPATIBILITY mode AnyNewerVersion means that the installed package version
+# will be considered compatible if it is newer or exactly the same as the requested version.
+# If SameMajorVersion is used instead, then the behaviour differs from AnyNewerVersion
+# in that the major version number must be the same as requested, e.g. version 2.0 will
+# not be considered compatible if 1.0 is requested.
+# If your project has more elaborated version matching rules, you will need to write your
+# own custom ConfigVersion.cmake file instead of using this macro.
+#
+# Internally, this macro executes configure_file() to create the resulting
+# version file. Depending on the COMPATIBLITY, either the file
+# BasicConfigVersion-SameMajorVersion.cmake.in or BasicConfigVersion-AnyNewerVersion.cmake.in
+# is used. Please note that these two files are internal to CMake and you should
+# not call configure_file() on them yourself, but they can be used as starting
+# point to create more sophisticted custom ConfigVersion.cmake files.
+#
+#
+# Example using both configure_package_config_file() and write_basic_package_version_file():
+# CMakeLists.txt:
+# set(INCLUDE_INSTALL_DIR include/ ... CACHE )
+# set(LIB_INSTALL_DIR lib/ ... CACHE )
+# set(SYSCONFIG_INSTALL_DIR etc/foo/ ... CACHE )
+# ...
+# include(CMakePackageConfigHelpers)
+# configure_package_config_file(FooConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
+# INSTALL_DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake
+# PATH_VARS INCLUDE_INSTALL_DIR SYSCONFIG_INSTALL_DIR)
+# write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
+# VERSION 1.2.3
+# COMPATIBILITY SameMajorVersion )
+# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
+# DESTINATION ${LIB_INSTALL_DIR}/Foo/cmake )
+#
+# With a FooConfig.cmake.in:
+# set(FOO_VERSION x.y.z)
+# ...
+# @PACKAGE_INIT@
+# ...
+# set_and_check(FOO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+# set_and_check(FOO_SYSCONFIG_DIR "@PACKAGE_SYSCONFIG_INSTALL_DIR@")
+
+
+#=============================================================================
+# Copyright 2012 Alexander Neundorf <neundorf@kde.org>
+#
+# 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.)
+
+include(CMakeParseArguments)
+
+include(WriteBasicConfigVersionFile)
+
+macro(WRITE_BASIC_PACKAGE_VERSION_FILE)
+ write_basic_config_version_file(${ARGN})
+endmacro()
+
+
+function(CONFIGURE_PACKAGE_CONFIG_FILE _inputFile _outputFile)
+ set(options NO_SET_AND_CHECK_MACRO)
+ set(oneValueArgs INSTALL_DESTINATION )
+ set(multiValueArgs PATH_VARS )
+
+ cmake_parse_arguments(CCF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+ if(CCF_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to CONFIGURE_PACKAGE_CONFIG_FILE(): \"${CCF_UNPARSED_ARGUMENTS}\"")
+ endif()
+
+ if(NOT CCF_INSTALL_DESTINATION)
+ message(FATAL_ERROR "No INSTALL_DESTINATION given to CONFIGURE_PACKAGE_CONFIG_FILE()")
+ endif()
+
+ if(IS_ABSOLUTE "${CCF_INSTALL_DESTINATION}")
+ set(absInstallDir "${CCF_INSTALL_DESTINATION}")
+ else()
+ set(absInstallDir "${CMAKE_INSTALL_PREFIX}/${CCF_INSTALL_DESTINATION}")
+ endif()
+ file(RELATIVE_PATH PACKAGE_RELATIVE_PATH "${absInstallDir}" "${CMAKE_INSTALL_PREFIX}" )
+
+ foreach(var ${CCF_PATH_VARS})
+ if(NOT DEFINED ${var})
+ message(FATAL_ERROR "Variable ${var} does not exist")
+ else()
+ if(IS_ABSOLUTE "${${var}}")
+ string(REPLACE "${CMAKE_INSTALL_PREFIX}" "\${PACKAGE_PREFIX_DIR}"
+ PACKAGE_${var} "${${var}}")
+ else()
+ set(PACKAGE_${var} "\${PACKAGE_PREFIX_DIR}/${${var}}")
+ endif()
+ endif()
+ endforeach()
+
+ set(PACKAGE_INIT "
+####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() #######
+get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/${PACKAGE_RELATIVE_PATH}\" ABSOLUTE)
+")
+
+ if(NOT CCF_NO_SET_AND_CHECK_MACRO)
+ set(PACKAGE_INIT "${PACKAGE_INIT}
+macro(set_and_check _var _file)
+ set(\${_var} \"\${_file}\")
+ if(NOT EXISTS \"\${_file}\")
+ message(FATAL_ERROR \"File or directory \${_file} referenced by variable \${_var} does not exist !\")
+ endif()
+endmacro()
+")
+ endif()
+
+ set(PACKAGE_INIT "${PACKAGE_INIT}
+####################################################################################")
+
+ configure_file("${_inputFile}" "${_outputFile}" @ONLY)
+
+endfunction()
diff --git a/Modules/CPack.cmake b/Modules/CPack.cmake
index e0a5518..571770e 100644
--- a/Modules/CPack.cmake
+++ b/Modules/CPack.cmake
@@ -53,176 +53,212 @@
##end
#
##variable
-# CPACK_PACKAGE_NAME - The name of the package (or application). If
-# not specified, defaults to the project name.
+# CPACK_PACKAGE_NAME - The name of the package (or application). If
+# not specified, defaults to the project name.
##end
#
##variable
-# CPACK_PACKAGE_VENDOR - The name of the package vendor. (e.g.,
-# "Kitware").
+# CPACK_PACKAGE_VENDOR - The name of the package vendor. (e.g.,
+# "Kitware").
##end
#
##variable
-# CPACK_PACKAGE_VERSION_MAJOR - Package major Version
+# CPACK_PACKAGE_VERSION_MAJOR - Package major Version
##end
#
##variable
-# CPACK_PACKAGE_VERSION_MINOR - Package minor Version
+# CPACK_PACKAGE_VERSION_MINOR - Package minor Version
##end
#
##variable
-# CPACK_PACKAGE_VERSION_PATCH - Package patch Version
+# CPACK_PACKAGE_VERSION_PATCH - Package patch Version
##end
#
##variable
-# CPACK_PACKAGE_DESCRIPTION_FILE - A text file used to describe the
-# project. Used, for example, the introduction screen of a
-# CPack-generated Windows installer to describe the project.
+# CPACK_PACKAGE_DESCRIPTION_FILE - A text file used to describe the
+# project. Used, for example, the introduction screen of a
+# CPack-generated Windows installer to describe the project.
##end
#
##variable
-# CPACK_PACKAGE_DESCRIPTION_SUMMARY - Short description of the
-# project (only a few words).
+# CPACK_PACKAGE_DESCRIPTION_SUMMARY - Short description of the
+# project (only a few words).
##end
#
##variable
-# CPACK_PACKAGE_FILE_NAME - The name of the package file to generate,
-# not including the extension. For example, cmake-2.6.1-Linux-i686.
+# CPACK_PACKAGE_FILE_NAME - The name of the package file to generate,
+# not including the extension. For example, cmake-2.6.1-Linux-i686.
+# The default value is
+# ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}.
##end
#
##variable
-# CPACK_PACKAGE_INSTALL_DIRECTORY - Installation directory on the
-# target system, e.g., "CMake 2.5".
+# CPACK_PACKAGE_INSTALL_DIRECTORY - Installation directory on the
+# target system. This may be used by some CPack generators
+# like NSIS to create an installation directory e.g., "CMake 2.5"
+# below the installation prefix. All installed element will be
+# put inside this directory.
##end
#
##variable
-# CPACK_PROJECT_CONFIG_FILE - File included at cpack time, once per
-# generator after setting CPACK_GENERATOR to the actual generator
-# being used. Allows per-generator setting of CPACK_* variables at
-# cpack time.
+# CPACK_PACKAGE_ICON - A branding image that will be displayed inside
+# the installer (used by GUI installers).
##end
#
##variable
-# CPACK_RESOURCE_FILE_LICENSE - License file for the project, which
-# will typically be displayed to the user (often with an explicit
-# "Accept" button, for graphical installers) prior to installation.
+# CPACK_PROJECT_CONFIG_FILE - CPack-time project CPack configuration
+# file. This file included at cpack time, once per
+# generator after CPack has set CPACK_GENERATOR to the actual generator
+# being used. It allows per-generator setting of CPACK_* variables at
+# cpack time.
##end
#
##variable
-# CPACK_RESOURCE_FILE_README - ReadMe file for the project, which
-# typically describes in some detail
+# CPACK_RESOURCE_FILE_LICENSE - License to be embedded in the installer. It
+# will typically be displayed to the user by the produced installer
+# (often with an explicit "Accept" button, for graphical installers)
+# prior to installation. This license file is NOT added to installed
+# file but is used by some CPack generators like NSIS. If you want
+# to install a license file (may be the same as this one)
+# along with your project you must add an appropriate CMake INSTALL
+# command in your CMakeLists.txt.
##end
#
##variable
-# CPACK_RESOURCE_FILE_WELCOME - Welcome file for the project, which
-# welcomes users to this installer. Typically used in the graphical
-# installers on Windows and Mac OS X.
+# CPACK_RESOURCE_FILE_README - ReadMe file to be embedded in the installer. It
+# typically describes in some detail the purpose of the project
+# during the installation. Not all CPack generators uses
+# this file.
##end
#
##variable
-# CPACK_MONOLITHIC_INSTALL - Disables the component-based
-# installation mechanism, so that all components are always installed.
+# CPACK_RESOURCE_FILE_WELCOME - Welcome file to be embedded in the
+# installer. It welcomes users to this installer.
+# Typically used in the graphical installers on Windows and Mac OS X.
##end
#
##variable
-# CPACK_GENERATOR - List of CPack generators to use. If not
-# specified, CPack will create a set of options (e.g.,
-# CPACK_BINARY_NSIS) allowing the user to enable/disable individual
-# generators.
+# CPACK_MONOLITHIC_INSTALL - Disables the component-based
+# installation mechanism. When set the component specification is ignored
+# and all installed items are put in a single "MONOLITHIC" package.
+# Some CPack generators do monolithic packaging by default and
+# may be asked to do component packaging by setting
+# CPACK_<GENNAME>_COMPONENT_INSTALL to 1/TRUE.
##end
#
##variable
-# CPACK_OUTPUT_CONFIG_FILE - The name of the CPack configuration file
-# for binary installers that will be generated by the CPack
-# module. Defaults to CPackConfig.cmake.
+# CPACK_GENERATOR - List of CPack generators to use. If not
+# specified, CPack will create a set of options CPACK_BINARY_<GENNAME> (e.g.,
+# CPACK_BINARY_NSIS) allowing the user to enable/disable individual
+# generators. This variable may be used on the command line
+# as well as in:
+#
+# cpack -D CPACK_GENERATOR="ZIP;TGZ" /path/to/build/tree
+##end
+#
+##variable
+# CPACK_OUTPUT_CONFIG_FILE - The name of the CPack binary configuration
+# file. This file is the CPack configuration generated by the CPack module
+# for binary installers. Defaults to CPackConfig.cmake.
##end
#
##variable
-# CPACK_PACKAGE_EXECUTABLES - Lists each of the executables along
-# with a text label, to be used to create Start Menu shortcuts on
-# Windows. For example, setting this to the list ccmake;CMake will
-# create a shortcut named "CMake" that will execute the installed
-# executable ccmake.
+# CPACK_PACKAGE_EXECUTABLES - Lists each of the executables and associated
+# text label to be used to create Start Menu shortcuts. For example,
+# setting this to the list ccmake;CMake will
+# create a shortcut named "CMake" that will execute the installed
+# executable ccmake. Not all CPack generators use it (at least NSIS and
+# OSXX11 do).
##end
#
##variable
-# CPACK_STRIP_FILES - List of files to be stripped. Starting with
-# CMake 2.6.0 CPACK_STRIP_FILES will be a boolean variable which
-# enables stripping of all files (a list of files evaluates to TRUE
-# in CMake, so this change is compatible).
+# CPACK_STRIP_FILES - List of files to be stripped. Starting with
+# CMake 2.6.0 CPACK_STRIP_FILES will be a boolean variable which
+# enables stripping of all files (a list of files evaluates to TRUE
+# in CMake, so this change is compatible).
##end
#
# The following CPack variables are specific to source packages, and
# will not affect binary packages:
#
##variable
-# CPACK_SOURCE_PACKAGE_FILE_NAME - The name of the source package,
-# e.g., cmake-2.6.1
+# CPACK_SOURCE_PACKAGE_FILE_NAME - The name of the source package. For
+# example cmake-2.6.1.
##end
#
##variable
-# CPACK_SOURCE_STRIP_FILES - List of files in the source tree that
-# will be stripped. Starting with CMake 2.6.0
-# CPACK_SOURCE_STRIP_FILES will be a boolean variable which enables
-# stripping of all files (a list of files evaluates to TRUE in CMake,
-# so this change is compatible).
+# CPACK_SOURCE_STRIP_FILES - List of files in the source tree that
+# will be stripped. Starting with CMake 2.6.0
+# CPACK_SOURCE_STRIP_FILES will be a boolean variable which enables
+# stripping of all files (a list of files evaluates to TRUE in CMake,
+# so this change is compatible).
##end
#
##variable
-# CPACK_SOURCE_GENERATOR - List of generators used for the source
-# packages. As with CPACK_GENERATOR, if this is not specified then
-# CPack will create a set of options (e.g., CPACK_SOURCE_ZIP)
-# allowing users to select which packages will be generated.
+# CPACK_SOURCE_GENERATOR - List of generators used for the source
+# packages. As with CPACK_GENERATOR, if this is not specified then
+# CPack will create a set of options (e.g., CPACK_SOURCE_ZIP)
+# allowing users to select which packages will be generated.
##end
#
##variable
-# CPACK_SOURCE_OUTPUT_CONFIG_FILE - The name of the CPack
-# configuration file for source installers that will be generated by
-# the CPack module. Defaults to CPackSourceConfig.cmake.
+# CPACK_SOURCE_OUTPUT_CONFIG_FILE - The name of the CPack source
+# configuration file. This file is the CPack configuration generated by the
+# CPack module for source installers. Defaults to CPackSourceConfig.cmake.
##end
#
##variable
-# CPACK_SOURCE_IGNORE_FILES - Pattern of files in the source tree
-# that won't be packaged when building a source package. This is a
-# list of patterns, e.g., /CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope.*
+# CPACK_SOURCE_IGNORE_FILES - Pattern of files in the source tree
+# that won't be packaged when building a source package. This is a
+# list of regular expression patterns (that must be properly escaped),
+# e.g., /CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~;cscope.*
##end
#
# The following variables are for advanced uses of CPack:
#
##variable
-# CPACK_CMAKE_GENERATOR - What CMake generator should be used if the
-# project is CMake project. Defaults to the value of CMAKE_GENERATOR;
-# few users will want to change this setting.
+# CPACK_CMAKE_GENERATOR - What CMake generator should be used if the
+# project is CMake project. Defaults to the value of CMAKE_GENERATOR
+# few users will want to change this setting.
##end
#
##variable
-# CPACK_INSTALL_CMAKE_PROJECTS - List of four values that specify
-# what project to install. The four values are: Build directory,
-# Project Name, Project Component, Directory. If omitted, CPack will
-# build an installer that installers everything.
+# CPACK_INSTALL_CMAKE_PROJECTS - List of four values that specify
+# what project to install. The four values are: Build directory,
+# Project Name, Project Component, Directory. If omitted, CPack will
+# build an installer that installers everything.
##end
#
##variable
-# CPACK_SYSTEM_NAME - System name, defaults to the value of
-# ${CMAKE_SYSTEM_NAME}.
+# CPACK_SYSTEM_NAME - System name, defaults to the value of
+# ${CMAKE_SYSTEM_NAME}.
##end
#
##variable
-# CPACK_PACKAGE_VERSION - Package full version, used internally. By
-# default, this is built from CPACK_PACKAGE_VERSION_MAJOR,
-# CPACK_PACKAGE_VERSION_MINOR, and CPACK_PACKAGE_VERSION_PATCH.
+# CPACK_PACKAGE_VERSION - Package full version, used internally. By
+# default, this is built from CPACK_PACKAGE_VERSION_MAJOR,
+# CPACK_PACKAGE_VERSION_MINOR, and CPACK_PACKAGE_VERSION_PATCH.
##end
#
##variable
-# CPACK_TOPLEVEL_TAG - Directory for the installed files.
+# CPACK_TOPLEVEL_TAG - Directory for the installed files.
##end
#
##variable
-# CPACK_INSTALL_COMMANDS - Extra commands to install components.
+# CPACK_INSTALL_COMMANDS - Extra commands to install components.
##end
#
##variable
-# CPACK_INSTALLED_DIRECTORIES - Extra directories to install.
+# CPACK_INSTALLED_DIRECTORIES - Extra directories to install.
+##end
+#
+##variable
+# CPACK_PACKAGE_INSTALL_REGISTRY_KEY - Registry key used when
+# installing this project. This is only used
+# by installer for Windows.
+##end
+##variable
+# CPACK_CREATE_DESKTOP_LINKS - List of desktop links to create.
##end
#
@@ -358,6 +394,12 @@ macro(cpack_optional_append _list _cond _item)
endif(${_cond})
endmacro(cpack_optional_append _list _cond _item)
+##variable
+# CPACK_BINARY_<GENNAME> - CPack generated options for binary generators. The
+# CPack.cmake module generates (when CPACK_GENERATOR is not set)
+# a set of CMake options (see CMake option command) which may then be used to
+# select the CPack generator(s) to be used when launching the package target.
+##end
# Provide options to choose generators
# we might check here if the required tools for the generates exist
# and set the defaults according to the results
diff --git a/Modules/CPackBundle.cmake b/Modules/CPackBundle.cmake
index 007fc04..0da51e3 100644
--- a/Modules/CPackBundle.cmake
+++ b/Modules/CPackBundle.cmake
@@ -4,33 +4,32 @@
# - CPack Bundle generator (Mac OS X) specific options
#
# Installers built on Mac OS X using the Bundle generator use the
-# aforementioned DragNDrop variables, plus the following Bundle-specific
-# parameters:
+# aforementioned DragNDrop (CPACK_DMG_xxx) variables, plus
+# the following Bundle-specific parameters (CPACK_BUNDLE_xxx).
##end
#
##variable
-# CPACK_BUNDLE_NAME - The name of the generated bundle. This
-# appears in the OSX finder as the bundle name. Required.
+# CPACK_BUNDLE_NAME - The name of the generated bundle. This
+# appears in the OSX finder as the bundle name. Required.
##end
#
##variable
-# CPACK_BUNDLE_PLIST - Path to an OSX plist file that will be used
-# as the Info.plist for the generated bundle. This assumes that
-# the caller has generated or specified their own Info.plist file.
-# Required.
+# CPACK_BUNDLE_PLIST - Path to an OSX plist file that will be used
+# for the generated bundle. This assumes that the caller has generated
+# or specified their own Info.plist file. Required.
##end
#
##variable
-# CPACK_BUNDLE_ICON - Path to an OSX icns file that will be used as
-# the icon for the generated bundle. This is the icon that appears
-# in the OSX finder for the bundle, and in the OSX dock when the
-# bundle is opened. Required.
+# CPACK_BUNDLE_ICON - Path to an OSX icon file that will be used as
+# the icon for the generated bundle. This is the icon that appears in the
+# OSX finder for the bundle, and in the OSX dock when the bundle is opened.
+# Required.
##end
#
##variable
-# CPACK_BUNDLE_STARTUP_SCRIPT - Path to an executable or script that
-# will be run whenever an end-user double-clicks the generated bundle
-# in the OSX Finder. Optional.
+# CPACK_BUNDLE_STARTUP_COMMAND - Path to a startup script. This is a path to
+# an executable or script that will be run whenever an end-user double-clicks
+# the generated bundle in the OSX Finder. Optional.
##end
#=============================================================================
diff --git a/Modules/CPackCygwin.cmake b/Modules/CPackCygwin.cmake
new file mode 100644
index 0000000..7ed7f67
--- /dev/null
+++ b/Modules/CPackCygwin.cmake
@@ -0,0 +1,33 @@
+##section Variables specific to CPack Cygwin generator
+##end
+##module
+# - Cygwin CPack generator (Cygwin).
+# The following variable is specific to installers build on
+# and/or for Cygwin:
+##end
+#
+##variable
+# CPACK_CYGWIN_PATCH_NUMBER - The Cygwin patch number.
+# FIXME: This documentation is incomplete.
+##end
+##variable
+# CPACK_CYGWIN_PATCH_FILE - The Cygwin patch file.
+# FIXME: This documentation is incomplete.
+##end
+##variable
+# CPACK_CYGWIN_BUILD_SCRIPT - The Cygwin build script.
+# FIXME: This documentation is incomplete.
+##end
+
+#=============================================================================
+# Copyright 2006-2012 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.)
diff --git a/Modules/CPackDMG.cmake b/Modules/CPackDMG.cmake
index caa8dc8..e866bab 100644
--- a/Modules/CPackDMG.cmake
+++ b/Modules/CPackDMG.cmake
@@ -7,53 +7,53 @@
##end
#
##variable
-# CPACK_DMG_VOLUME_NAME - The volume name of the generated disk
-# image. Defaults to CPACK_PACKAGE_FILE_NAME.
+# CPACK_DMG_VOLUME_NAME - The volume name of the generated disk
+# image. Defaults to CPACK_PACKAGE_FILE_NAME.
##end
#
##variable
-# CPACK_DMG_FORMAT - The disk image format. Common values are UDRO
-# (UDIF read-only), UDZO (UDIF zlib-compressed) or UDBZ (UDIF
-# bzip2-compressed). Refer to hdiutil(1) for more information on
-# other available formats.
+# CPACK_DMG_FORMAT - The disk image format. Common values are UDRO
+# (UDIF read-only), UDZO (UDIF zlib-compressed) or UDBZ (UDIF
+# bzip2-compressed). Refer to hdiutil(1) for more information on
+# other available formats.
##end
#
##variable
-# CPACK_DMG_DS_STORE - Path to a custom .DS_Store file which e.g.
-# can be used to specify the Finder window position/geometry and
-# layout (such as hidden toolbars, placement of the icons etc.).
-# This file has to be generated by the Finder (either manually or
-# through OSA-script) using a normal folder from which the .DS_Store
-# file can then be extracted.
+# CPACK_DMG_DS_STORE - Path to a custom DS_Store file. This .DS_Store
+# file e.g. can be used to specify the Finder window
+# position/geometry and layout (such as hidden toolbars, placement of the
+# icons etc.). This file has to be generated by the Finder (either manually or
+# through OSA-script) using a normal folder from which the .DS_Store
+# file can then be extracted.
##end
#
##variable
-# CPACK_DMG_BACKGROUND_IMAGE - Path to an image file which is to be
-# used as the background for the Finder Window when the disk image
-# is opened. By default no background image is set. The background
-# image is applied after applying the custom .DS_Store file.
+# CPACK_DMG_BACKGROUND_IMAGE - Path to a background image file. This
+# file will be used as the background for the Finder Window when the disk
+# image is opened. By default no background image is set. The background
+# image is applied after applying the custom .DS_Store file.
##end
#
##variable
-# CPACK_COMMAND_HDIUTIL - Path to the hdiutil(1) command used to
-# operate on disk image files on Mac OS X. This variable can be used
-# to override the automatically detected command (or specify its
-# location if the auto-detection fails to find it.)
+# CPACK_COMMAND_HDIUTIL - Path to the hdiutil(1) command used to
+# operate on disk image files on Mac OS X. This variable can be used
+# to override the automatically detected command (or specify its
+# location if the auto-detection fails to find it.)
##end
#
##variable
-# CPACK_COMMAND_SETFILE - Path to the SetFile(1) command used to set
-# extended attributes on files and directories on Mac OS X. This
-# variable can be used to override the automatically detected
-# command (or specify its location if the auto-detection fails to
-# find it.)
+# CPACK_COMMAND_SETFILE - Path to the SetFile(1) command used to set
+# extended attributes on files and directories on Mac OS X. This
+# variable can be used to override the automatically detected
+# command (or specify its location if the auto-detection fails to
+# find it.)
##end
#
##variable
-# CPACK_COMMAND_REZ - Path to the Rez(1) command used to compile
-# resources on Mac OS X. This variable can be used to override the
-# automatically detected command (or specify its location if the
-# auto-detection fails to find it.)
+# CPACK_COMMAND_REZ - Path to the Rez(1) command used to compile
+# resources on Mac OS X. This variable can be used to override the
+# automatically detected command (or specify its location if the
+# auto-detection fails to find it.)
##end
#=============================================================================
diff --git a/Modules/CPackNSIS.cmake b/Modules/CPackNSIS.cmake
index 97179d7..7d9f29b 100644
--- a/Modules/CPackNSIS.cmake
+++ b/Modules/CPackNSIS.cmake
@@ -8,11 +8,6 @@
##end
#
##variable
-# CPACK_PACKAGE_INSTALL_REGISTRY_KEY - Registry key used when
-# installing this project.
-##end
-#
-##variable
# CPACK_NSIS_INSTALL_ROOT - The default installation directory presented
# to the end user by the NSIS installer is under this root dir. The full
# directory presented to the end user is:
@@ -30,11 +25,6 @@
##end
#
##variable
-# CPACK_PACKAGE_ICON - A branding image that will be displayed inside
-# the installer.
-##end
-#
-##variable
# CPACK_NSIS_EXTRA_INSTALL_COMMANDS - Extra NSIS commands that will
# be added to the install Section.
##end
@@ -107,6 +97,15 @@
# CPACK_NSIS_MUI_FINISHPAGE_RUN - Specify an executable to add an option
# to run on the finish page of the NSIS installer.
##end
+##variable
+# CPACK_NSIS_MENU_LINKS - Specify links in [application] menu.
+# This should contain a list of pair "link" "link name". The link
+# may be an URL or a path relative to installation prefix.
+# Like:
+# set(CPACK_NSIS_MENU_LINKS
+# "doc/cmake-@CMake_VERSION_MAJOR@.@CMake_VERSION_MINOR@/cmake.html" "CMake Help"
+# "http://www.cmake.org" "CMake Web Site")
+##end
#=============================================================================
# Copyright 2006-2009 Kitware, Inc.
diff --git a/Modules/CPackPackageMaker.cmake b/Modules/CPackPackageMaker.cmake
index 8fe423c..45ba465 100644
--- a/Modules/CPackPackageMaker.cmake
+++ b/Modules/CPackPackageMaker.cmake
@@ -4,20 +4,21 @@
# - PackageMaker CPack generator (Mac OS X).
# The following variable is specific to installers build on Mac OS X
# using PackageMaker:
+##end
#
##variable
-# CPACK_OSX_PACKAGE_VERSION - The version of Mac OS X that the
-# resulting PackageMaker archive should be compatible
-# with. Different versions of Mac OS X support different
-# features. For example, CPack can only build component-based
-# installers for Mac OS X 10.4 or newer, and can only build
-# installers that download component son-the-fly for Mac OS X 10.5
-# or newer. If left blank, this value will be set to the minimum
-# version of Mac OS X that supports the requested features. Set this
-# variable to some value (e.g., 10.4) only if you want to guarantee
-# that your installer will work on that version of Mac OS X, and
-# don't mind missing extra features available in the installer
-# shipping with later versions of Mac OS X.
+# CPACK_OSX_PACKAGE_VERSION - The version of Mac OS X that the
+# resulting PackageMaker archive should be compatible with. Different
+# versions of Mac OS X support different
+# features. For example, CPack can only build component-based
+# installers for Mac OS X 10.4 or newer, and can only build
+# installers that download component son-the-fly for Mac OS X 10.5
+# or newer. If left blank, this value will be set to the minimum
+# version of Mac OS X that supports the requested features. Set this
+# variable to some value (e.g., 10.4) only if you want to guarantee
+# that your installer will work on that version of Mac OS X, and
+# don't mind missing extra features available in the installer
+# shipping with later versions of Mac OS X.
##end
#=============================================================================
diff --git a/Modules/CheckCCompilerFlag.cmake b/Modules/CheckCCompilerFlag.cmake
index 3618bdf..1c08c59 100644
--- a/Modules/CheckCCompilerFlag.cmake
+++ b/Modules/CheckCCompilerFlag.cmake
@@ -33,6 +33,7 @@ MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
FAIL_REGEX "unknown .*option" # Clang
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
+ FAIL_REGEX "option .*not supported" # Intel
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
diff --git a/Modules/CheckCXXCompilerFlag.cmake b/Modules/CheckCXXCompilerFlag.cmake
index 134f875..6fa69b1 100644
--- a/Modules/CheckCXXCompilerFlag.cmake
+++ b/Modules/CheckCXXCompilerFlag.cmake
@@ -33,6 +33,7 @@ MACRO (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT)
FAIL_REGEX "unknown .*option" # Clang
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
+ FAIL_REGEX "option .*not supported" # Intel
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
diff --git a/Modules/DeployQt4.cmake b/Modules/DeployQt4.cmake
index 83f322c..b37695d 100644
--- a/Modules/DeployQt4.cmake
+++ b/Modules/DeployQt4.cmake
@@ -82,6 +82,7 @@
include(BundleUtilities)
set(DeployQt4_cmake_dir "${CMAKE_CURRENT_LIST_DIR}")
+set(DeployQt4_apple_plugins_dir "PlugIns")
function(write_qt4_conf qt_conf_dir qt_conf_contents)
set(qt_conf_path "${qt_conf_dir}/qt.conf")
@@ -125,11 +126,17 @@ function(fixup_qt4_executable executable)
if(QT_LIBRARY_DIR)
list(APPEND dirs "${QT_LIBRARY_DIR}")
endif()
+ if(QT_BINARY_DIR)
+ list(APPEND dirs "${QT_BINARY_DIR}")
+ endif()
if(APPLE)
set(qt_conf_dir "${executable}/Contents/Resources")
set(executable_path "${executable}")
set(write_qt_conf TRUE)
+ if(NOT plugins_dir)
+ set(plugins_dir "${DeployQt4_apple_plugins_dir}")
+ endif()
else()
get_filename_component(executable_path "${executable}" PATH)
if(NOT executable_path)
@@ -141,7 +148,7 @@ function(fixup_qt4_executable executable)
foreach(plugin ${qtplugins})
set(installed_plugin_path "")
- install_qt4_plugin("${plugin}" "${plugins_dir}" "${executable}" 1 installed_plugin_path)
+ install_qt4_plugin("${plugin}" "${executable}" 1 installed_plugin_path)
list(APPEND libs ${installed_plugin_path})
endforeach()
@@ -166,23 +173,19 @@ function(install_qt4_plugin_path plugin executable copy installed_plugin_path_va
set(component ${ARGV5})
set(configurations ${ARGV6})
if(EXISTS "${plugin}")
- if(plugins_dir)
- set(plugins_dir "${plugins_dir}")
- else()
- if(APPLE)
- set(plugins_dir "PlugIns")
- else()
- set(plugins_dir "plugins")
- endif()
- endif()
if(APPLE)
+ if(NOT plugins_dir)
+ set(plugins_dir "${DeployQt4_apple_plugins_dir}")
+ endif()
set(plugins_path "${executable}/Contents/${plugins_dir}")
else()
- get_filename_component(executable_path "${executable}" PATH)
- if(NOT executable_path)
- set(executable_path ".")
+ get_filename_component(plugins_path "${executable}" PATH)
+ if(NOT plugins_path)
+ set(plugins_path ".")
+ endif()
+ if(plugins_dir)
+ set(plugins_path "${plugins_path}/${plugins_dir}")
endif()
- set(plugins_path "${executable_path}/${plugins_dir}")
endif()
set(plugin_group "")
@@ -210,7 +213,7 @@ function(install_qt4_plugin_path plugin executable copy installed_plugin_path_va
endif()
install(FILES "${plugin}" DESTINATION "${plugins_path}" ${configurations} ${component})
endif()
- set(${installed_plugin_path_var} ${${installed_path_var}} "${plugins_path}/${plugin_name}" PARENT_SCOPE)
+ set(${installed_plugin_path_var} "${plugins_path}/${plugin_name}" PARENT_SCOPE)
endif()
endfunction()
@@ -220,11 +223,7 @@ function(install_qt4_plugin plugin executable copy installed_plugin_path_var)
if(EXISTS "${plugin}")
install_qt4_plugin_path("${plugin}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}")
else()
- if(QT_IS_STATIC)
- string(TOUPPER "QT_${plugin}_LIBRARY" plugin_var)
- else()
- string(TOUPPER "QT_${plugin}_PLUGIN" plugin_var)
- endif()
+ string(TOUPPER "QT_${plugin}_PLUGIN" plugin_var)
set(plugin_release_var "${plugin_var}_RELEASE")
set(plugin_debug_var "${plugin_var}_DEBUG")
set(plugin_release "${${plugin_release_var}}")
@@ -232,10 +231,24 @@ function(install_qt4_plugin plugin executable copy installed_plugin_path_var)
if(DEFINED "${plugin_release_var}" AND DEFINED "${plugin_debug_var}" AND NOT EXISTS "${plugin_release}" AND NOT EXISTS "${plugin_debug}")
message(WARNING "Qt plugin \"${plugin}\" not recognized or found.")
endif()
- install_qt4_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}" "Release|RelWithDebInfo|MinSizeRel")
- install_qt4_plugin_path("${plugin_debug}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}" "Debug")
+ if(NOT EXISTS "${${plugin_debug_var}}")
+ set(plugin_debug "${plugin_release}")
+ endif()
+
+ if(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE)
+ install_qt4_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}_release" "${plugins_dir}" "${component}" "Release|RelWithDebInfo|MinSizeRel")
+ install_qt4_plugin_path("${plugin_debug}" "${executable}" "${copy}" "${installed_plugin_path_var}_debug" "${plugins_dir}" "${component}" "Debug")
+
+ if(CMAKE_BUILD_TYPE MATCHES "^Debug$")
+ set(${installed_plugin_path_var} ${${installed_plugin_path_var}_debug})
+ else()
+ set(${installed_plugin_path_var} ${${installed_plugin_path_var}_release})
+ endif()
+ else()
+ install_qt4_plugin_path("${plugin_release}" "${executable}" "${copy}" "${installed_plugin_path_var}" "${plugins_dir}" "${component}")
+ endif()
endif()
- set(installed_plugin_path_var "${installed_plugin_path_var}" PARENT_SCOPE)
+ set(${installed_plugin_path_var} ${${installed_plugin_path_var}} PARENT_SCOPE)
endfunction()
function(install_qt4_executable executable)
@@ -248,6 +261,9 @@ function(install_qt4_executable executable)
if(QT_LIBRARY_DIR)
list(APPEND dirs "${QT_LIBRARY_DIR}")
endif()
+ if(QT_BINARY_DIR)
+ list(APPEND dirs "${QT_BINARY_DIR}")
+ endif()
if(component)
set(component COMPONENT ${component})
else()
@@ -264,16 +280,16 @@ function(install_qt4_executable executable)
set(qt_plugins_dir "")
endif()
- if(NOT qtplugins AND QT_LIBRARIES_PLUGINS)
- set(qtplugins "${QT_LIBRARIES_PLUGINS}")
+ if(QT_IS_STATIC)
+ message(WARNING "Qt built statically: not installing plugins.")
+ else()
+ foreach(plugin ${qtplugins})
+ set(installed_plugin_paths "")
+ install_qt4_plugin("${plugin}" "${executable}" 0 installed_plugin_paths "${plugins_dir}" "${component}")
+ list(APPEND libs ${installed_plugin_paths})
+ endforeach()
endif()
- foreach(plugin ${qtplugins})
- set(installed_plugin_paths "")
- install_qt4_plugin("${plugin}" "${executable}" 0 installed_plugin_paths "${plugins_dir}" "${component}")
- list(APPEND libs ${installed_plugin_paths})
- endforeach()
-
resolve_qt4_paths(libs)
install(CODE
diff --git a/Modules/FindGnuplot.cmake b/Modules/FindGnuplot.cmake
index 3e36e4b..b8dc3f4 100644
--- a/Modules/FindGnuplot.cmake
+++ b/Modules/FindGnuplot.cmake
@@ -5,6 +5,8 @@
# GNUPLOT_FOUND - system has Gnuplot
# GNUPLOT_EXECUTABLE - the Gnuplot executable
# GNUPLOT_VERSION_STRING - the version of Gnuplot found (since CMake 2.8.8)
+#
+# GNUPLOT_VERSION_STRING will not work for old versions like 3.7.1.
#=============================================================================
# Copyright 2002-2009 Kitware, Inc.
diff --git a/Modules/FindHSPELL.cmake b/Modules/FindHSPELL.cmake
index 054f565..ca5709b 100644
--- a/Modules/FindHSPELL.cmake
+++ b/Modules/FindHSPELL.cmake
@@ -32,12 +32,15 @@ IF (HSPELL_INCLUDE_DIR)
FILE(READ "${HSPELL_INCLUDE_DIR}/hspell.h" HSPELL_H)
STRING(REGEX REPLACE ".*#define HSPELL_VERSION_MAJOR ([0-9]+).*" "\\1" HSPELL_VERSION_MAJOR "${HSPELL_H}")
STRING(REGEX REPLACE ".*#define HSPELL_VERSION_MINOR ([0-9]+).*" "\\1" HSPELL_VERSION_MINOR "${HSPELL_H}")
+ SET(HSPELL_VERSION_STRING "${HSPELL_VERSION_MAJOR}.${HSPELL_VERSION_MINOR}")
ENDIF()
# handle the QUIETLY and REQUIRED arguments and set HSPELL_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(HSPELL DEFAULT_MSG HSPELL_LIBRARIES HSPELL_INCLUDE_DIR)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(HSPELL
+ REQUIRED_VARS HSPELL_LIBRARIES HSPELL_INCLUDE_DIR
+ VERSION_VAR HSPELL_VERSION_STRING)
MARK_AS_ADVANCED(HSPELL_INCLUDE_DIR HSPELL_LIBRARIES)
diff --git a/Modules/FindImageMagick.cmake b/Modules/FindImageMagick.cmake
index 52d575b..f21b630 100644
--- a/Modules/FindImageMagick.cmake
+++ b/Modules/FindImageMagick.cmake
@@ -27,6 +27,8 @@
# ImageMagick_VERSION_STRING - the version of ImageMagick found
# (since CMake 2.8.8)
#
+# ImageMagick_VERSION_STRING will not work for old versions like 5.2.3.
+#
# There are also components for the following ImageMagick APIs:
#
# Magick++
@@ -171,7 +173,7 @@ FOREACH(component ${ImageMagick_FIND_COMPONENTS}
ELSEIF(ImageMagick_${component}_EXECUTABLE)
# if no components were requested explicitly put all (default) executables
# in the list
- LIST(APPEND ImageMagick_DEFAULT_EXECUTABLES "${ImageMagick_${component}_EXECUTABLE}")
+ LIST(APPEND ImageMagick_DEFAULT_EXECUTABLES ImageMagick_${component}_EXECUTABLE)
ENDIF(ImageMagick_FIND_COMPONENTS)
ENDIF(component STREQUAL "Magick++")
ENDFOREACH(component)
diff --git a/Modules/FindOpenMP.cmake b/Modules/FindOpenMP.cmake
index e1af15e..b96a2ec 100644
--- a/Modules/FindOpenMP.cmake
+++ b/Modules/FindOpenMP.cmake
@@ -25,11 +25,6 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
-get_property(_ENABLED_LANGUAGES GLOBAL PROPERTY ENABLED_LANGUAGES)
-list(FIND _ENABLED_LANGUAGES "C" _HAVE_LANGUAGE_C)
-list(FIND _ENABLED_LANGUAGES "CXX" _HAVE_LANGUAGE_CXX)
-unset(_ENABLED_LANGUAGES)
-
set(_OPENMP_REQUIRED_VARS)
function(_OPENMP_FLAG_CANDIDATES LANG)
@@ -93,7 +88,7 @@ int main() {
")
# check c compiler
-if(NOT _HAVE_LANGUAGE_C EQUAL -1)
+if(CMAKE_C_COMPILER_LOADED)
# if these are set then do not try to find them again,
# by avoiding any try_compiles for the flags
if(OpenMP_C_FLAGS)
@@ -124,7 +119,7 @@ if(NOT _HAVE_LANGUAGE_C EQUAL -1)
endif()
# check cxx compiler
-if(NOT _HAVE_LANGUAGE_CXX EQUAL -1)
+if(CMAKE_CXX_COMPILER_LOADED)
# if these are set then do not try to find them again,
# by avoiding any try_compiles for the flags
if(OpenMP_CXX_FLAGS)
@@ -158,9 +153,6 @@ if(NOT _HAVE_LANGUAGE_CXX EQUAL -1)
unset(OpenMP_CXX_TEST_SOURCE)
endif()
-unset(_HAVE_LANGUAGE_C)
-unset(_HAVE_LANGUAGE_CXX)
-
if(_OPENMP_REQUIRED_VARS)
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
diff --git a/Modules/FindOpenSceneGraph.cmake b/Modules/FindOpenSceneGraph.cmake
index 460f0fd..52f9316 100644
--- a/Modules/FindOpenSceneGraph.cmake
+++ b/Modules/FindOpenSceneGraph.cmake
@@ -78,7 +78,7 @@ list(APPEND _osg_modules_to_process "osg" "OpenThreads")
list(REMOVE_DUPLICATES _osg_modules_to_process)
if(OpenSceneGraph_DEBUG)
- message("[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
+ message(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
"Components = ${_osg_modules_to_process}")
endif()
@@ -93,7 +93,7 @@ endif()
# Try to ascertain the version...
if(OSG_INCLUDE_DIR)
if(OpenSceneGraph_DEBUG)
- message("[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
+ message(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
"Detected OSG_INCLUDE_DIR = ${OSG_INCLUDE_DIR}")
endif()
@@ -127,14 +127,14 @@ if(OSG_INCLUDE_DIR)
string(REGEX REPLACE ".*#define OPENSCENEGRAPH_PATCH_VERSION[ \t]+([0-9]+).*"
"\\1" _osg_VERSION_PATCH ${_osg_Version_contents})
else()
- message("[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
+ message(WARNING "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
"Failed to parse version number, please report this as a bug")
endif()
set(OPENSCENEGRAPH_VERSION "${_osg_VERSION_MAJOR}.${_osg_VERSION_MINOR}.${_osg_VERSION_PATCH}"
CACHE INTERNAL "The version of OSG which was detected")
if(OpenSceneGraph_DEBUG)
- message("[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
+ message(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
"Detected version ${OPENSCENEGRAPH_VERSION}")
endif()
endif()
@@ -165,7 +165,7 @@ endif()
#
foreach(_osg_module ${_osg_modules_to_process})
if(OpenSceneGraph_DEBUG)
- message("[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
+ message(STATUS "[ FindOpenSceneGraph.cmake:${CMAKE_CURRENT_LIST_LINE} ] "
"Calling find_package(${_osg_module} ${_osg_required} ${_osg_quiet})")
endif()
find_package(${_osg_module} ${_osg_quiet})
diff --git a/Modules/FindPythonInterp.cmake b/Modules/FindPythonInterp.cmake
index 5c1d56b..a131c5f 100644
--- a/Modules/FindPythonInterp.cmake
+++ b/Modules/FindPythonInterp.cmake
@@ -10,11 +10,14 @@
# PYTHON_VERSION_MINOR - Python minor version found e.g. 5
# PYTHON_VERSION_PATCH - Python patch version found e.g. 2
#
-# Python_ADDITIONAL_VERSIONS - list of additional Python versions to search for
+# The Python_ADDITIONAL_VERSIONS variable can be used to specify a list of
+# version numbers that should be taken into account when searching for Python.
+# You need to set this variable before calling find_package(PythonInterp).
#=============================================================================
# Copyright 2005-2010 Kitware, Inc.
# Copyright 2011 Bjoern Ricks <bjoern.ricks@gmail.com>
+# Copyright 2012 Rolf Eike Beer <eike@sf-mail.de>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
@@ -88,24 +91,42 @@ endif()
# determine python version string
if(PYTHON_EXECUTABLE)
- execute_process(COMMAND "${PYTHON_EXECUTABLE}" --version
- ERROR_VARIABLE _VERSION
+ execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c
+ "import sys; sys.stdout.write(';'.join([str(x) for x in sys.version_info[:3]]))"
+ OUTPUT_VARIABLE _VERSION
RESULT_VARIABLE _PYTHON_VERSION_RESULT
- OUTPUT_QUIET
- ERROR_STRIP_TRAILING_WHITESPACE)
- if(_PYTHON_VERSION_RESULT)
- execute_process(COMMAND "${PYTHON_EXECUTABLE}" -V
- ERROR_VARIABLE _VERSION
+ ERROR_QUIET)
+ if(NOT _PYTHON_VERSION_RESULT)
+ string(REPLACE ";" "." PYTHON_VERSION_STRING "${_VERSION}")
+ list(GET _VERSION 0 PYTHON_VERSION_MAJOR)
+ list(GET _VERSION 1 PYTHON_VERSION_MINOR)
+ list(GET _VERSION 2 PYTHON_VERSION_PATCH)
+ if(PYTHON_VERSION_PATCH EQUAL 0)
+ # it's called "Python 2.7", not "2.7.0"
+ string(REGEX REPLACE "\\.0$" "" PYTHON_VERSION_STRING "${PYTHON_VERSION_STRING}")
+ endif()
+ else()
+ # sys.version predates sys.version_info, so use that
+ execute_process(COMMAND "${PYTHON_EXECUTABLE}" -c "import sys; sys.stdout.write(sys.version)"
+ OUTPUT_VARIABLE _VERSION
RESULT_VARIABLE _PYTHON_VERSION_RESULT
- OUTPUT_QUIET
- ERROR_STRIP_TRAILING_WHITESPACE)
- endif(_PYTHON_VERSION_RESULT)
- if(NOT _PYTHON_VERSION_RESULT AND _VERSION MATCHES "^Python [0-9]+\\.[0-9]+.*")
- string(REPLACE "Python " "" PYTHON_VERSION_STRING "${_VERSION}")
- string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
- string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
- if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*")
- string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" PYTHON_VERSION_PATCH "${PYTHON_VERSION_STRING}")
+ ERROR_QUIET)
+ if(NOT _PYTHON_VERSION_RESULT)
+ string(REGEX REPLACE " .*" "" PYTHON_VERSION_STRING "${_VERSION}")
+ string(REGEX REPLACE "^([0-9]+)\\.[0-9]+.*" "\\1" PYTHON_VERSION_MAJOR "${PYTHON_VERSION_STRING}")
+ string(REGEX REPLACE "^[0-9]+\\.([0-9])+.*" "\\1" PYTHON_VERSION_MINOR "${PYTHON_VERSION_STRING}")
+ if(PYTHON_VERSION_STRING MATCHES "^[0-9]+\\.[0-9]+\\.[0-9]+.*")
+ string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" PYTHON_VERSION_PATCH "${PYTHON_VERSION_STRING}")
+ else()
+ set(PYTHON_VERSION_PATCH "0")
+ endif()
+ else()
+ # sys.version was first documented for Python 1.5, so assume
+ # this is older.
+ set(PYTHON_VERSION_STRING "1.4")
+ set(PYTHON_VERSION_MAJOR "1")
+ set(PYTHON_VERSION_MAJOR "4")
+ set(PYTHON_VERSION_MAJOR "0")
endif()
endif()
unset(_PYTHON_VERSION_RESULT)
diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake
index da7a1ac..fcd0838 100644
--- a/Modules/FindPythonLibs.cmake
+++ b/Modules/FindPythonLibs.cmake
@@ -7,8 +7,12 @@
# PYTHON_LIBRARIES - path to the python library
# PYTHON_INCLUDE_PATH - path to where Python.h is found (deprecated)
# PYTHON_INCLUDE_DIRS - path to where Python.h is found
-# PYTHON_DEBUG_LIBRARIES - path to the debug library
-# Python_ADDITIONAL_VERSIONS - list of additional Python versions to search for
+# PYTHON_DEBUG_LIBRARIES - path to the debug library (deprecated)
+# PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8)
+#
+# The Python_ADDITIONAL_VERSIONS variable can be used to specify a list of
+# version numbers that should be taken into account when searching for Python.
+# You need to set this variable before calling find_package(PythonLibs).
#=============================================================================
# Copyright 2001-2009 Kitware, Inc.
@@ -27,11 +31,42 @@ INCLUDE(CMakeFindFrameworks)
# Search for the python framework on Apple.
CMAKE_FIND_FRAMEWORKS(Python)
+SET(_PYTHON1_VERSIONS 1.6 1.5)
+SET(_PYTHON2_VERSIONS 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0)
+SET(_PYTHON3_VERSIONS 3.3 3.2 3.1 3.0)
+
+IF(PythonLibs_FIND_VERSION)
+ IF(PythonLibs_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
+ STRING(REGEX REPLACE "^([0-9]+\\.[0-9]+).*" "\\1" _PYTHON_FIND_MAJ_MIN "${PythonLibs_FIND_VERSION}")
+ STRING(REGEX REPLACE "^([0-9]+).*" "\\1" _PYTHON_FIND_MAJ "${_PYTHON_FIND_MAJ_MIN}")
+ UNSET(_PYTHON_FIND_OTHER_VERSIONS)
+ IF(NOT PythonLibs_FIND_VERSION_EXACT)
+ FOREACH(_PYTHON_V ${_PYTHON${_PYTHON_FIND_MAJ}_VERSIONS})
+ IF(NOT _PYTHON_V VERSION_LESS _PYTHON_FIND_MAJ_MIN)
+ LIST(APPEND _PYTHON_FIND_OTHER_VERSIONS ${_PYTHON_V})
+ ENDIF()
+ ENDFOREACH()
+ ENDIF(NOT PythonLibs_FIND_VERSION_EXACT)
+ UNSET(_PYTHON_FIND_MAJ_MIN)
+ UNSET(_PYTHON_FIND_MAJ)
+ ELSE(PythonLibs_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
+ SET(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON${PythonLibs_FIND_VERSION}_VERSIONS})
+ ENDIF(PythonLibs_FIND_VERSION MATCHES "^[0-9]+\\.[0-9]+(\\.[0-9]+.*)?$")
+ELSE(PythonLibs_FIND_VERSION)
+ SET(_PYTHON_FIND_OTHER_VERSIONS ${_PYTHON3_VERSIONS} ${_PYTHON2_VERSIONS} ${_PYTHON1_VERSIONS})
+ENDIF(PythonLibs_FIND_VERSION)
+
# Set up the versions we know about, in the order we will search. Always add
# the user supplied additional versions to the front.
-set(_Python_VERSIONS
+SET(_Python_VERSIONS
${Python_ADDITIONAL_VERSIONS}
- 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2.0 1.6 1.5)
+ ${_PYTHON_FIND_OTHER_VERSIONS}
+ )
+
+UNSET(_PYTHON_FIND_OTHER_VERSIONS)
+UNSET(_PYTHON1_VERSIONS)
+UNSET(_PYTHON2_VERSIONS)
+UNSET(_PYTHON3_VERSIONS)
FOREACH(_CURRENT_VERSION ${_Python_VERSIONS})
STRING(REPLACE "." "" _CURRENT_VERSION_NO_DOTS ${_CURRENT_VERSION})
@@ -92,6 +127,17 @@ FOREACH(_CURRENT_VERSION ${_Python_VERSIONS})
SET(PYTHON_INCLUDE_PATH "${PYTHON_INCLUDE_DIR}" CACHE INTERNAL
"Path to where Python.h is found (deprecated)")
+ IF(PYTHON_INCLUDE_DIR AND EXISTS "${PYTHON_INCLUDE_DIR}/patchlevel.h")
+ FILE(STRINGS "${PYTHON_INCLUDE_DIR}/patchlevel.h" python_version_str
+ REGEX "^#define[ \t]+PY_VERSION[ \t]+\"[^\"]+\"")
+ STRING(REGEX REPLACE "^#define[ \t]+PY_VERSION[ \t]+\"([^\"]+)\".*" "\\1"
+ PYTHONLIBS_VERSION_STRING "${python_version_str}")
+ UNSET(python_version_str)
+ ENDIF(PYTHON_INCLUDE_DIR AND EXISTS "${PYTHON_INCLUDE_DIR}/patchlevel.h")
+
+ IF(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
+ BREAK()
+ ENDIF(PYTHON_LIBRARY AND PYTHON_INCLUDE_DIR)
ENDFOREACH(_CURRENT_VERSION)
MARK_AS_ADVANCED(
@@ -105,13 +151,23 @@ MARK_AS_ADVANCED(
# library. We now set the variables listed by the documentation for this
# module.
SET(PYTHON_INCLUDE_DIRS "${PYTHON_INCLUDE_DIR}")
-SET(PYTHON_LIBRARIES "${PYTHON_LIBRARY}")
SET(PYTHON_DEBUG_LIBRARIES "${PYTHON_DEBUG_LIBRARY}")
+# These variables have been historically named in this module different from
+# what SELECT_LIBRARY_CONFIGURATIONS() expects.
+SET(PYTHON_LIBRARY_DEBUG "${PYTHON_DEBUG_LIBRARY}")
+SET(PYTHON_LIBRARY_RELEASE "${PYTHON_LIBRARY}")
+INCLUDE(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
+SELECT_LIBRARY_CONFIGURATIONS(PYTHON)
+# SELECT_LIBRARY_CONFIGURATIONS() sets ${PREFIX}_FOUND if it has a library.
+# Unset this, this prefix doesn't match the module prefix, they are different
+# for historical reasons.
+UNSET(PYTHON_FOUND)
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibs DEFAULT_MSG PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
-
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(PythonLibs
+ REQUIRED_VARS PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS
+ VERSION_VAR PYTHONLIBS_VERSION_STRING)
# PYTHON_ADD_MODULE(<name> src1 src2 ... srcN) is used to build modules for python.
# PYTHON_WRITE_MODULES_HEADER(<filename>) writes a header file you can include
diff --git a/Modules/FindQt3.cmake b/Modules/FindQt3.cmake
index 86236cc..2d8dbde 100644
--- a/Modules/FindQt3.cmake
+++ b/Modules/FindQt3.cmake
@@ -1,10 +1,11 @@
# - Locate Qt include paths and libraries
# This module defines:
-# QT_INCLUDE_DIR - where to find qt.h, etc.
-# QT_LIBRARIES - the libraries to link against to use Qt.
-# QT_DEFINITIONS - definitions to use when
-# compiling code that uses Qt.
-# QT_FOUND - If false, don't try to use Qt.
+# QT_INCLUDE_DIR - where to find qt.h, etc.
+# QT_LIBRARIES - the libraries to link against to use Qt.
+# QT_DEFINITIONS - definitions to use when
+# compiling code that uses Qt.
+# QT_FOUND - If false, don't try to use Qt.
+# QT_VERSION_STRING - the version of Qt found
#
# If you need the multithreaded version of Qt, set QT_MT_REQUIRED to TRUE
#
@@ -46,13 +47,16 @@ IF(QT4_FOUND)
ENDIF(QT4_FOUND)
-FILE(GLOB GLOB_PATHS_BIN /usr/lib/qt-3*/bin/)
+FILE(GLOB GLOB_PATHS /usr/lib/qt-3*)
+FOREACH(GLOB_PATH ${GLOB_PATHS})
+ LIST(APPEND GLOB_PATHS_BIN "${GLOB_PATH}/bin")
+ENDFOREACH(GLOB_PATH)
FIND_PATH(QT_INCLUDE_DIR qt.h
"[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.1;InstallDir]/include/Qt"
"[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.2.0;InstallDir]/include/Qt"
"[HKEY_CURRENT_USER\\Software\\Trolltech\\Qt3Versions\\3.1.0;InstallDir]/include/Qt"
$ENV{QTDIR}/include
- ${GLOB_PATHS_BIN}
+ ${GLOB_PATHS}
/usr/local/qt/include
/usr/lib/qt/include
/usr/lib/qt3/include
@@ -71,12 +75,13 @@ ENDIF(NOT EXISTS ${QT_INCLUDE_DIR}/qglobal.h)
IF(QT_INCLUDE_DIR)
#extract the version string from qglobal.h
FILE(READ ${QT_INCLUDE_DIR}/qglobal.h QGLOBAL_H)
- STRING(REGEX MATCH "#define[\t ]+QT_VERSION_STR[\t ]+\"([0-9]+.[0-9]+.[0-9]+)\"" QGLOBAL_H "${QGLOBAL_H}")
- STRING(REGEX REPLACE ".*\"([0-9]+.[0-9]+.[0-9]+)\".*" "\\1" qt_version_str "${QGLOBAL_H}")
+ STRING(REGEX MATCH "#define[\t ]+QT_VERSION_STR[\t ]+\"[0-9]+.[0-9]+.[0-9]+[a-z]*\"" QGLOBAL_H "${QGLOBAL_H}")
+ STRING(REGEX REPLACE ".*\"([0-9]+.[0-9]+.[0-9]+[a-z]*)\".*" "\\1" qt_version_str "${QGLOBAL_H}")
# Under windows the qt library (MSVC) has the format qt-mtXYZ where XYZ is the
# version X.Y.Z, so we need to remove the dots from version
STRING(REGEX REPLACE "\\." "" qt_version_str_lib "${qt_version_str}")
+ SET(QT_VERSION_STRING "${qt_version_str}")
ENDIF(QT_INCLUDE_DIR)
FILE(GLOB GLOB_PATHS_LIB /usr/lib/qt-3*/lib/)
@@ -195,58 +200,16 @@ IF (WIN32)
)
ENDIF (WIN32)
-
-IF (QT_MIN_VERSION)
-
- STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" qt_major_vers "${qt_version_str}")
- STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" qt_minor_vers "${qt_version_str}")
- STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" qt_patch_vers "${qt_version_str}")
-
- #now parse the parts of the user given version string into variables
- STRING(REGEX MATCH "^[0-9]+\\.[0-9]+\\.[0-9]+$" req_qt_major_vers "${QT_MIN_VERSION}")
- IF (NOT req_qt_major_vers)
- error_message( "Invalid Qt version string given: \"${QT_MIN_VERSION}\", expected e.g. \"3.1.5\"")
- ENDIF (NOT req_qt_major_vers)
-
- STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" req_qt_major_vers "${QT_MIN_VERSION}")
- STRING(REGEX REPLACE "[0-9]+\\.([0-9])+\\.[0-9]+" "\\1" req_qt_minor_vers "${QT_MIN_VERSION}")
- STRING(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" req_qt_patch_vers "${QT_MIN_VERSION}")
-
- # req = "6.5.4", qt = "3.2.1"
- MACRO(error_message msg)
- IF(QT3_REQUIRED)
- MESSAGE( FATAL_ERROR ${msg})
- ELSE(QT3_REQUIRED)
- MESSAGE( STATUS ${msg})
- ENDIF(QT3_REQUIRED)
- ENDMACRO(error_message)
-
- IF (req_qt_major_vers GREATER qt_major_vers) # (6 > 3) ?
- ERROR_MESSAGE( "Qt major version not matched (required: ${QT_MIN_VERSION}, found: ${qt_version_str})") # yes
- ELSE (req_qt_major_vers GREATER qt_major_vers) # no
- IF (req_qt_major_vers LESS qt_major_vers) # (6 < 3) ?
- SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes
- ELSE (req_qt_major_vers LESS qt_major_vers) # ( 6==3) ?
- IF (req_qt_minor_vers GREATER qt_minor_vers) # (5>2) ?
- ERROR_MESSAGE( "Qt minor version not matched (required: ${QT_MIN_VERSION}, found: ${qt_version_str})") # yes
- ELSE (req_qt_minor_vers GREATER qt_minor_vers) # no
- IF (req_qt_minor_vers LESS qt_minor_vers) # (5<2) ?
- SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes
- ELSE (req_qt_minor_vers LESS qt_minor_vers) # (5==2)
- IF (req_qt_patch_vers GREATER qt_patch_vers) # (4>1) ?
- ERROR_MESSAGE( "Qt patch level not matched (required: ${QT_MIN_VERSION}, found: ${qt_version_str})") # yes
- ELSE (req_qt_patch_vers GREATER qt_patch_vers) # (4>1) ?
- SET( QT_VERSION_BIG_ENOUGH "YES" ) # yes
- ENDIF (req_qt_patch_vers GREATER qt_patch_vers) # (4>1) ?
- ENDIF (req_qt_minor_vers LESS qt_minor_vers)
- ENDIF (req_qt_minor_vers GREATER qt_minor_vers)
- ENDIF (req_qt_major_vers LESS qt_major_vers)
- ENDIF (req_qt_major_vers GREATER qt_major_vers)
-ENDIF (QT_MIN_VERSION)
+#support old QT_MIN_VERSION if set, but not if version is supplied by find_package()
+IF(NOT Qt3_FIND_VERSION AND QT_MIN_VERSION)
+ SET(Qt3_FIND_VERSION ${QT_MIN_VERSION})
+ENDIF(NOT Qt3_FIND_VERSION AND QT_MIN_VERSION)
# if the include a library are found then we have it
INCLUDE(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt3 DEFAULT_MSG QT_QT_LIBRARY QT_INCLUDE_DIR QT_MOC_EXECUTABLE)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt3
+ REQUIRED_VARS QT_QT_LIBRARY QT_INCLUDE_DIR QT_MOC_EXECUTABLE
+ VERSION_VAR QT_VERSION_STRING)
SET(QT_FOUND ${QT3_FOUND} )
IF(QT_FOUND)
@@ -296,8 +259,16 @@ IF(QT_FOUND)
ENDIF(QT_QT_LIBRARY MATCHES "qt-mt")
ENDIF(QT_FOUND)
-EXEC_PROGRAM(${QT_MOC_EXECUTABLE} ARGS "-v" OUTPUT_VARIABLE QTVERSION_MOC)
-EXEC_PROGRAM(${QT_UIC_EXECUTABLE} ARGS "-version" OUTPUT_VARIABLE QTVERSION_UIC)
+IF(QT_MOC_EXECUTABLE)
+ EXECUTE_PROCESS(COMMAND ${QT_MOC_EXECUTABLE} "-v"
+ OUTPUT_VARIABLE QTVERSION_MOC
+ ERROR_QUIET)
+ENDIF(QT_MOC_EXECUTABLE)
+IF(QT_UIC_EXECUTABLE)
+ EXECUTE_PROCESS(COMMAND ${QT_UIC_EXECUTABLE} "-version"
+ OUTPUT_VARIABLE QTVERSION_UIC
+ ERROR_QUIET)
+ENDIF(QT_UIC_EXECUTABLE)
SET(_QT_UIC_VERSION_3 FALSE)
IF("${QTVERSION_UIC}" MATCHES ".* 3..*")
diff --git a/Modules/GenerateExportHeader.cmake b/Modules/GenerateExportHeader.cmake
index f3f61f6..ce23d5d 100644
--- a/Modules/GenerateExportHeader.cmake
+++ b/Modules/GenerateExportHeader.cmake
@@ -18,7 +18,7 @@
# [PREFIX_NAME <prefix_name>]
# )
#
-# ADD_COMPILER_EXPORT_FLAGS( [FATAL_WARNINGS] )
+# ADD_COMPILER_EXPORT_FLAGS( [<output_variable>] )
#
# By default GENERATE_EXPORT_HEADER() generates macro names in a file name
# determined by the name of the library. The ADD_COMPILER_EXPORT_FLAGS function
@@ -149,46 +149,20 @@ include(CheckCXXCompilerFlag)
macro(_check_cxx_compiler_attribute _ATTRIBUTE _RESULT)
check_cxx_source_compiles("${_ATTRIBUTE} int somefunc() { return 0; }
int main() { return somefunc();}" ${_RESULT}
- # Some compilers do not fail with a bad flag
- FAIL_REGEX "unrecognized .*option" # GNU
- FAIL_REGEX "ignoring unknown option" # MSVC
- FAIL_REGEX "warning D9002" # MSVC, any lang
- FAIL_REGEX "[Uu]nknown option" # HP
- FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
- FAIL_REGEX "command option .* is not recognized" # XL
)
endmacro()
macro(_test_compiler_hidden_visibility)
- if(CMAKE_COMPILER_IS_GNUCXX)
- exec_program(${CMAKE_C_COMPILER} ARGS --version
- OUTPUT_VARIABLE _gcc_version_info)
- string(REGEX MATCH "[345]\\.[0-9]\\.[0-9]"
- _gcc_version "${_gcc_version_info}")
- # gcc on mac just reports: "gcc (GCC) 3.3 20030304 ..." without the
- # patch level, handle this here:
- if(NOT _gcc_version)
- string(REGEX REPLACE ".*\\(GCC\\).* ([34]\\.[0-9]) .*" "\\1.0"
- _gcc_version "${_gcc_version_info}")
- endif()
-
- if("${_gcc_version}" VERSION_LESS "4.2")
- set(GCC_TOO_OLD TRUE)
- message(WARNING "GCC version older than 4.2")
- endif()
- endif()
-
- if(CMAKE_CXX_COMPILER_ID MATCHES Intel)
- exec_program(${CMAKE_CXX_COMPILER} ARGS -V
- OUTPUT_VARIABLE _intel_version_info)
- string(REGEX REPLACE ".*Version ([0-9]+(\\.[0-9]+)+).*" "\\1"
- _intel_version "${_intel_version_info}")
-
- if(${_intel_version} VERSION_LESS "12.0")
- set(_INTEL_TOO_OLD TRUE)
- message(WARNING "Intel compiler older than 12.0")
- endif()
+ if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.2")
+ set(GCC_TOO_OLD TRUE)
+ message(WARNING "GCC version older than 4.2")
+ elseif(CMAKE_COMPILER_IS_GNUC AND CMAKE_C_COMPILER_VERSION VERSION_LESS "4.2")
+ set(GCC_TOO_OLD TRUE)
+ message(WARNING "GCC version older than 4.2")
+ elseif(CMAKE_CXX_COMPILER_ID MATCHES Intel AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "12.0")
+ set(_INTEL_TOO_OLD TRUE)
+ message(WARNING "Intel compiler older than 12.0")
endif()
diff --git a/Modules/Platform/Windows-Borland-C.cmake b/Modules/Platform/Windows-Borland-C.cmake
index ebb74a1..e2f76aa 100644
--- a/Modules/Platform/Windows-Borland-C.cmake
+++ b/Modules/Platform/Windows-Borland-C.cmake
@@ -1,2 +1 @@
-include(Platform/Windows-Borland)
-__borland_language(C)
+include(Platform/Windows-Embarcadero-C)
diff --git a/Modules/Platform/Windows-Borland-CXX.cmake b/Modules/Platform/Windows-Borland-CXX.cmake
index 1260c0e..809490f 100644
--- a/Modules/Platform/Windows-Borland-CXX.cmake
+++ b/Modules/Platform/Windows-Borland-CXX.cmake
@@ -1,2 +1 @@
-include(Platform/Windows-Borland)
-__borland_language(CXX)
+include(Platform/Windows-Embarcadero-CXX)
diff --git a/Modules/Platform/Windows-Embarcadero-C.cmake b/Modules/Platform/Windows-Embarcadero-C.cmake
new file mode 100644
index 0000000..607fd4e
--- /dev/null
+++ b/Modules/Platform/Windows-Embarcadero-C.cmake
@@ -0,0 +1,3 @@
+set(_lang C)
+include(Platform/Windows-Embarcadero)
+__embarcadero_language(C)
diff --git a/Modules/Platform/Windows-Embarcadero-CXX.cmake b/Modules/Platform/Windows-Embarcadero-CXX.cmake
new file mode 100644
index 0000000..279a4de
--- /dev/null
+++ b/Modules/Platform/Windows-Embarcadero-CXX.cmake
@@ -0,0 +1,3 @@
+set(_lang CXX)
+include(Platform/Windows-Embarcadero)
+__embarcadero_language(CXX)
diff --git a/Modules/Platform/Windows-Borland.cmake b/Modules/Platform/Windows-Embarcadero.cmake
index 5c402bd..87b3767 100644
--- a/Modules/Platform/Windows-Borland.cmake
+++ b/Modules/Platform/Windows-Embarcadero.cmake
@@ -1,6 +1,6 @@
#=============================================================================
-# Copyright 2002-2009 Kitware, Inc.
+# Copyright 2002-2012 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
@@ -13,26 +13,33 @@
# License text for the above reference.)
# This module is shared by multiple languages; use include blocker.
-if(__WINDOWS_BORLAND)
+if(__WINDOWS_EMBARCADERO)
return()
endif()
-set(__WINDOWS_BORLAND 1)
+set(__WINDOWS_EMBARCADERO 1)
SET(BORLAND 1)
-# Borland target type flags (bcc32 -h -t):
-# -tW GUI App (implies -U__CONSOLE__)
-# -tWC Console App (implies -D__CONSOLE__=1)
-# -tWD Build a DLL (implies -D__DLL__=1 -D_DLL=1)
-# -tWM Enable threads (implies -D__MT__=1 -D_MT=1)
-# -tWR Use DLL runtime (implies -D_RTLDLL, and '-tW' too!!)
-#
-# Notes:
-# - The flags affect linking so we pass them to the linker.
-# - The flags affect preprocessing so we pass them to the compiler.
-# - Since '-tWR' implies '-tW' we use '-tWR -tW-' instead.
-# - Since '-tW-' disables '-tWD' we use '-tWR -tW- -tWD' for DLLs.
-set(_RTLDLL "-tWR -tW-")
+if("${CMAKE_${_lang}_COMPILER_VERSION}" VERSION_LESS 6.30)
+ # Borland target type flags (bcc32 -h -t):
+ set(_tW "-tW") # -tW GUI App (implies -U__CONSOLE__)
+ set(_tC "-tWC") # -tWC Console App (implies -D__CONSOLE__=1)
+ set(_tD "-tWD") # -tWD Build a DLL (implies -D__DLL__=1 -D_DLL=1)
+ set(_tM "-tWM") # -tWM Enable threads (implies -D__MT__=1 -D_MT=1)
+ set(_tR "-tWR -tW-") # -tWR Use DLL runtime (implies -D_RTLDLL, and '-tW' too!!)
+ # Notes:
+ # - The flags affect linking so we pass them to the linker.
+ # - The flags affect preprocessing so we pass them to the compiler.
+ # - Since '-tWR' implies '-tW' we use '-tWR -tW-' instead.
+ # - Since '-tW-' disables '-tWD' we use '-tWR -tW- -tWD' for DLLs.
+else()
+ set(EMBARCADERO 1)
+ set(_tC "-tC") # Target is a console application
+ set(_tD "-tD") # Target is a shared library
+ set(_tM "-tM") # Target is multi-threaded
+ set(_tR "-tR") # Target uses the dynamic RTL
+ set(_tW "-tW") # Target is a Windows application
+endif()
set(_COMPILE_C "-c")
set(_COMPILE_CXX "-P -c")
@@ -50,14 +57,14 @@ SET(CMAKE_FIND_LIBRARY_SUFFIXES "-bcc.lib" ".lib")
SET (CMAKE_MANGLE_OBJECT_FILE_NAMES "ON")
# extra flags for a win32 exe
-SET(CMAKE_CREATE_WIN32_EXE "-tW" )
+SET(CMAKE_CREATE_WIN32_EXE "${_tW}" )
# extra flags for a console app
-SET(CMAKE_CREATE_CONSOLE_EXE "-tWC" )
+SET(CMAKE_CREATE_CONSOLE_EXE "${_tC}" )
SET (CMAKE_BUILD_TYPE Debug CACHE STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel.")
-SET (CMAKE_EXE_LINKER_FLAGS_INIT "-tWM -lS:10000000 -lSc:10000000 ")
+SET (CMAKE_EXE_LINKER_FLAGS_INIT "${_tM} -lS:10000000 -lSc:10000000 ")
SET (CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT "-v")
SET (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO_INIT "-v")
SET (CMAKE_SHARED_LINKER_FLAGS_INIT ${CMAKE_EXE_LINKER_FLAGS_INIT})
@@ -67,18 +74,19 @@ SET (CMAKE_MODULE_LINKER_FLAGS_INIT ${CMAKE_SHARED_LINKER_FLAGS_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT ${CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT})
SET (CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO_INIT ${CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO_INIT})
-macro(__borland_language lang)
- set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "-tWD")
+
+macro(__embarcadero_language lang)
+ set(CMAKE_SHARED_LIBRARY_${lang}_FLAGS "${_tD}")
# compile a source file into an object file
# place <DEFINES> outside the response file because Borland refuses
# to parse quotes from the response file.
set(CMAKE_${lang}_COMPILE_OBJECT
- "<CMAKE_${lang}_COMPILER> ${_RTLDLL} <DEFINES> ${CMAKE_START_TEMP_FILE}-DWIN32 -o<OBJECT> <FLAGS> ${_COMPILE_${lang}} <SOURCE>${CMAKE_END_TEMP_FILE}"
+ "<CMAKE_${lang}_COMPILER> ${_tR} <DEFINES> ${CMAKE_START_TEMP_FILE}-DWIN32 -o<OBJECT> <FLAGS> ${_COMPILE_${lang}} <SOURCE>${CMAKE_END_TEMP_FILE}"
)
set(CMAKE_${lang}_LINK_EXECUTABLE
- "<CMAKE_${lang}_COMPILER> ${_RTLDLL} -e<TARGET> ${CMAKE_START_TEMP_FILE}<LINK_FLAGS> <FLAGS> <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
+ "<CMAKE_${lang}_COMPILER> ${_tR} -e<TARGET> ${CMAKE_START_TEMP_FILE}<LINK_FLAGS> <FLAGS> <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
# "implib -c -w <TARGET_IMPLIB> <TARGET>"
)
@@ -91,7 +99,7 @@ macro(__borland_language lang)
# Create a module library.
set(CMAKE_${lang}_CREATE_SHARED_MODULE
- "<CMAKE_${lang}_COMPILER> ${_RTLDLL} -tWD ${CMAKE_START_TEMP_FILE}-e<TARGET> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
+ "<CMAKE_${lang}_COMPILER> ${_tR} ${_tD} ${CMAKE_START_TEMP_FILE}-e<TARGET> <LINK_FLAGS> <LINK_LIBRARIES> <OBJECTS>${CMAKE_END_TEMP_FILE}"
)
# Create an import library for another target.
@@ -112,7 +120,7 @@ macro(__borland_language lang)
)
# Initial configuration flags.
- set(CMAKE_${lang}_FLAGS_INIT "-tWM")
+ set(CMAKE_${lang}_FLAGS_INIT "${_tM}")
set(CMAKE_${lang}_FLAGS_DEBUG_INIT "-Od -v")
set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "-O1 -DNDEBUG")
set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O2 -DNDEBUG")
diff --git a/Modules/UseSWIG.cmake b/Modules/UseSWIG.cmake
index 2a83045..ef76724 100644
--- a/Modules/UseSWIG.cmake
+++ b/Modules/UseSWIG.cmake
@@ -47,20 +47,17 @@ MACRO(SWIG_MODULE_INITIALIZE name language)
SET(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")
SET(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")
- IF("x${SWIG_MODULE_${name}_LANGUAGE}x" MATCHES "^xUNKNOWNx$")
- MESSAGE(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
- ENDIF("x${SWIG_MODULE_${name}_LANGUAGE}x" MATCHES "^xUNKNOWNx$")
-
SET(SWIG_MODULE_${name}_REAL_NAME "${name}")
- IF("x${SWIG_MODULE_${name}_LANGUAGE}x" MATCHES "^xPYTHONx$")
+ IF("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")
+ MESSAGE(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")
+ ELSEIF("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")
# when swig is used without the -interface it will produce in the module.py
# a 'import _modulename' statement, which implies having a corresponding
# _modulename.so (*NIX), _modulename.pyd (Win32).
SET(SWIG_MODULE_${name}_REAL_NAME "_${name}")
- ENDIF("x${SWIG_MODULE_${name}_LANGUAGE}x" MATCHES "^xPYTHONx$")
- IF("x${SWIG_MODULE_${name}_LANGUAGE}x" MATCHES "^xPERLx$")
+ ELSEIF("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")
SET(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")
- ENDIF("x${SWIG_MODULE_${name}_LANGUAGE}x" MATCHES "^xPERLx$")
+ ENDIF()
ENDMACRO(SWIG_MODULE_INITIALIZE)
#
diff --git a/Modules/WriteBasicConfigVersionFile.cmake b/Modules/WriteBasicConfigVersionFile.cmake
index 0b6519d..038cb57 100644
--- a/Modules/WriteBasicConfigVersionFile.cmake
+++ b/Modules/WriteBasicConfigVersionFile.cmake
@@ -1,31 +1,6 @@
# WRITE_BASIC_CONFIG_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion) )
#
-# Writes a file for use as <package>ConfigVersion.cmake file to <filename>.
-# See the documentation of FIND_PACKAGE() for details on this.
-# filename is the output filename, it should be in the build tree.
-# major.minor.patch is the version number of the project to be installed
-# The COMPATIBILITY mode AnyNewerVersion means that the installed package version
-# will be considered compatible if it is newer or exactly the same as the requested version.
-# If SameMajorVersion is used instead, then the behaviour differs from AnyNewerVersion
-# in that the major version number must be the same as requested, e.g. version 2.0 will
-# not be considered compatible if 1.0 is requested.
-# If your project has more elaborated version matching rules, you will need to write your
-# own custom ConfigVersion.cmake file instead of using this macro.
-#
-# Example:
-# write_basic_config_version_file(${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
-# VERSION 1.2.3
-# COMPATIBILITY SameMajorVersion )
-# install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FooConfigVersion.cmake
-# ${CMAKE_CURRENT_BINARY_DIR}/FooConfig.cmake
-# DESTINATION lib/cmake/Foo )
-#
-# Internally, this macro executes configure_file() to create the resulting
-# version file. Depending on the COMPATIBLITY, either the file
-# BasicConfigVersion-SameMajorVersion.cmake.in or BasicConfigVersion-AnyNewerVersion.cmake.in
-# is used. Please note that these two files are internal to CMake and you should
-# not call configure_file() on them yourself, but they can be used as starting
-# point to create more sophisticted custom ConfigVersion.cmake files.
+# Deprecated, see WRITE_BASIC_PACKAGE_VERSION_FILE(), it is identical.
#=============================================================================
# Copyright 2008-2011 Alexander Neundorf, <neundorf@kde.org>
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index 18f9b8b..f9d1c03 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -185,6 +185,8 @@ SET(SRCS
cmGeneratedFileStream.cxx
cmGeneratorExpression.cxx
cmGeneratorExpression.h
+ cmGeneratorTarget.cxx
+ cmGeneratorTarget.h
cmGlobalGenerator.cxx
cmGlobalGenerator.h
cmGlobalUnixMakefileGenerator3.cxx
diff --git a/Source/CPack/cmCPackDocumentVariables.cxx b/Source/CPack/cmCPackDocumentVariables.cxx
index 68cde78..d2e3802 100644
--- a/Source/CPack/cmCPackDocumentVariables.cxx
+++ b/Source/CPack/cmCPackDocumentVariables.cxx
@@ -21,12 +21,60 @@ void cmCPackDocumentVariables::DefineVariables(cmake* cm)
"", false,
"Variables common to all CPack generators");
- // Subsection: variables defined/used by cpack,
- // which are specific to one CPack generator
-// cm->DefineProperty
-// ("CPACK_RPM_PACKAGE_NAME", cmProperty::VARIABLE,
-// "RPM specific package name.",
-// "If not specified, defaults to CPACK_PACKAGE_NAME."
-// "", false,
-// "Variables specific to a CPack generator");
+ cm->DefineProperty
+ ("CPACK_INCLUDE_TOPLEVEL_DIRECTORY", cmProperty::VARIABLE,
+ "Boolean toggle to include/exclude top level directory.",
+ "When preparing a package CPack installs the item under"
+ " the so-called top level directory. The purpose of"
+ " is to include (set to 1 or ON or TRUE) the top level directory"
+ " in the package or not (set to 0 or OFF or FALSE).\n"
+ "Each CPack generator as a built-in default value for this"
+ " variable. E.g. Archive generators (ZIP, TGZ, ...) includes"
+ " the top level whereas RPM or DEB don't. The user may override"
+ " the default value byt setting this variable.\n"
+ "There is a similar variable "
+ "CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY"
+ "which may be used to override the behavior for the component"
+ "packaging case which may have different default value for"
+ "historical (now backward compatibility) reason.", false,
+ "Variables common to all CPack generators");
+
+ cm->DefineProperty
+ ("CPACK_SET_DESTDIR", cmProperty::VARIABLE,
+ "Boolean toggle to make CPack use DESTDIR mechanism when"
+ " packaging.", "DESTDIR means DESTination DIRectory."
+ " It is commonly used by makefile "
+ "users in order to install software at non-default location. It "
+ "is a basic relocation mechanism. "
+ "It is usually invoked like this:\n"
+ " make DESTDIR=/home/john install\n"
+ "which will install the concerned software using the"
+ " installation prefix, e.g. \"/usr/local\" prepended with "
+ "the DESTDIR value which finally gives \"/home/john/usr/local\"."
+ " When preparing a package, CPack first installs the items to be "
+ "packaged in a local (to the build tree) directory by using the "
+ "same DESTDIR mechanism. Nevertheless, if "
+ "CPACK_SET_DESTDIR is set then CPack will set DESTDIR before"
+ " doing the local install. The most noticeable difference is"
+ " that without CPACK_SET_DESTDIR, CPack uses "
+ "CPACK_PACKAGING_INSTALL_PREFIX as a prefix whereas with "
+ "CPACK_SET_DESTDIR set, CPack will use CMAKE_INSTALL_PREFIX as"
+ " a prefix.\n"
+ "Manually setting CPACK_SET_DESTDIR may help (or simply be"
+ " necessary) if some install rules uses absolute "
+ "DESTINATION (see CMake INSTALL command)."
+ " However, starting with"
+ " CPack/CMake 2.8.3 RPM and DEB installers tries to handle DESTDIR"
+ " automatically so that it is seldom necessary for the user to set"
+ " it.", false,
+ "Variables common to all CPack generators");
+
+ cm->DefineProperty
+ ("CPACK_INSTALL_SCRIPT", cmProperty::VARIABLE,
+ "Extra CMake script provided by the user.",
+ "If set this CMake script will be executed by CPack "
+ "during its local [CPack-private] installation "
+ "which is done right before packaging the files."
+ " The script is not called by e.g.: make install.", false,
+ "Variables common to all CPack generators");
}
diff --git a/Source/CPack/cmCPackDragNDropGenerator.cxx b/Source/CPack/cmCPackDragNDropGenerator.cxx
index 83b6b64..3b6135e 100644
--- a/Source/CPack/cmCPackDragNDropGenerator.cxx
+++ b/Source/CPack/cmCPackDragNDropGenerator.cxx
@@ -421,6 +421,7 @@ int cmCPackDragNDropGenerator::CreateDMG(const std::string& src_dir,
if(ifs.is_open())
{
cmGeneratedFileStream osf(sla_r.c_str());
+ osf << "#include <CoreServices/CoreServices.r>\n\n";
osf << SLAHeader;
osf << "\n";
osf << "data 'TEXT' (5002, \"English\") {\n";
@@ -481,13 +482,11 @@ int cmCPackDragNDropGenerator::CreateDMG(const std::string& src_dir,
// Rez the SLA
cmOStringStream embed_sla_command;
- embed_sla_command << "/bin/bash -c \""; // need expansion of "*.r"
embed_sla_command << this->GetOption("CPACK_COMMAND_REZ");
- embed_sla_command << " /Developer/Headers/FlatCarbon/*.r ";
- embed_sla_command << "'" << sla_r << "'";
+ embed_sla_command << " \"" << sla_r << "\"";
embed_sla_command << " -a -o ";
- embed_sla_command << "'" << temp_udco << "'\"";
-
+ embed_sla_command << "\"" << temp_udco << "\"";
+
if(!this->RunCommand(embed_sla_command, &error))
{
cmCPackLogger(cmCPackLog::LOG_ERROR,
diff --git a/Source/CTest/cmCTestBuildCommand.h b/Source/CTest/cmCTestBuildCommand.h
index 9eb4907..cabc39b 100644
--- a/Source/CTest/cmCTestBuildCommand.h
+++ b/Source/CTest/cmCTestBuildCommand.h
@@ -43,12 +43,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_build";}
+ virtual const char* GetName() const { return "ctest_build";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Build the project.";
}
@@ -57,7 +57,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_build([BUILD build_dir] [TARGET target] [RETURN_VALUE res]\n"
diff --git a/Source/CTest/cmCTestConfigureCommand.h b/Source/CTest/cmCTestConfigureCommand.h
index 156e6f2..b343fc1 100644
--- a/Source/CTest/cmCTestConfigureCommand.h
+++ b/Source/CTest/cmCTestConfigureCommand.h
@@ -38,12 +38,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_configure";}
+ virtual const char* GetName() const { return "ctest_configure";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Configure the project build tree.";
}
@@ -51,7 +51,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_configure([BUILD build_dir] [SOURCE source_dir] [APPEND]\n"
diff --git a/Source/CTest/cmCTestCoverageCommand.h b/Source/CTest/cmCTestCoverageCommand.h
index 25c10dc..2fe762c 100644
--- a/Source/CTest/cmCTestCoverageCommand.h
+++ b/Source/CTest/cmCTestCoverageCommand.h
@@ -39,12 +39,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_coverage";}
+ virtual const char* GetName() const { return "ctest_coverage";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Collect coverage tool results.";
}
@@ -52,7 +52,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_coverage([BUILD build_dir] [RETURN_VALUE res] [APPEND]\n"
diff --git a/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h
index cf61045..a763fe9 100644
--- a/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h
+++ b/Source/CTest/cmCTestEmptyBinaryDirectoryCommand.h
@@ -48,12 +48,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_empty_binary_directory";}
+ virtual const char* GetName() const { return "ctest_empty_binary_directory";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "empties the binary directory";
}
@@ -61,7 +61,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_empty_binary_directory( directory )\n"
diff --git a/Source/CTest/cmCTestMemCheckCommand.h b/Source/CTest/cmCTestMemCheckCommand.h
index 8fa142f..399fe8b 100644
--- a/Source/CTest/cmCTestMemCheckCommand.h
+++ b/Source/CTest/cmCTestMemCheckCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_memcheck";}
+ virtual const char* GetName() const { return "ctest_memcheck";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Run tests with a dynamic analysis tool.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_memcheck([BUILD build_dir] [RETURN_VALUE res] [APPEND]\n"
diff --git a/Source/CTest/cmCTestReadCustomFilesCommand.h b/Source/CTest/cmCTestReadCustomFilesCommand.h
index 2213c8f..f382b0f 100644
--- a/Source/CTest/cmCTestReadCustomFilesCommand.h
+++ b/Source/CTest/cmCTestReadCustomFilesCommand.h
@@ -46,12 +46,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_read_custom_files";}
+ virtual const char* GetName() const { return "ctest_read_custom_files";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "read CTestCustom files.";
}
@@ -59,7 +59,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_read_custom_files( directory ... )\n"
diff --git a/Source/CTest/cmCTestRunScriptCommand.h b/Source/CTest/cmCTestRunScriptCommand.h
index 5765150..6df69af 100644
--- a/Source/CTest/cmCTestRunScriptCommand.h
+++ b/Source/CTest/cmCTestRunScriptCommand.h
@@ -47,12 +47,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_run_script";}
+ virtual const char* GetName() const { return "ctest_run_script";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "runs a ctest -S script";
}
@@ -60,7 +60,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_run_script([NEW_PROCESS] script_file_name script_file_name1 \n"
diff --git a/Source/CTest/cmCTestSleepCommand.h b/Source/CTest/cmCTestSleepCommand.h
index 468cd85..80fd6af 100644
--- a/Source/CTest/cmCTestSleepCommand.h
+++ b/Source/CTest/cmCTestSleepCommand.h
@@ -47,12 +47,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_sleep";}
+ virtual const char* GetName() const { return "ctest_sleep";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "sleeps for some amount of time";
}
@@ -60,7 +60,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_sleep(<seconds>)\n"
diff --git a/Source/CTest/cmCTestStartCommand.h b/Source/CTest/cmCTestStartCommand.h
index afbc77b..6be4770 100644
--- a/Source/CTest/cmCTestStartCommand.h
+++ b/Source/CTest/cmCTestStartCommand.h
@@ -55,12 +55,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_start";}
+ virtual const char* GetName() const { return "ctest_start";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Starts the testing for a given model";
}
@@ -68,7 +68,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_start(Model [TRACK <track>] [APPEND] [source [binary]])\n"
diff --git a/Source/CTest/cmCTestSubmitCommand.h b/Source/CTest/cmCTestSubmitCommand.h
index edc9c65..53ee875 100644
--- a/Source/CTest/cmCTestSubmitCommand.h
+++ b/Source/CTest/cmCTestSubmitCommand.h
@@ -48,12 +48,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_submit";}
+ virtual const char* GetName() const { return "ctest_submit";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Submit results to a dashboard server.";
}
@@ -61,7 +61,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_submit([PARTS ...] [FILES ...] [RETRY_COUNT count] "
diff --git a/Source/CTest/cmCTestTestCommand.h b/Source/CTest/cmCTestTestCommand.h
index c6fd631..d184ff2 100644
--- a/Source/CTest/cmCTestTestCommand.h
+++ b/Source/CTest/cmCTestTestCommand.h
@@ -39,12 +39,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_test";}
+ virtual const char* GetName() const { return "ctest_test";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Run tests in the project build tree.";
}
@@ -52,7 +52,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_test([BUILD build_dir] [APPEND]\n"
diff --git a/Source/CTest/cmCTestTestHandler.cxx b/Source/CTest/cmCTestTestHandler.cxx
index 9b12393..ead449e 100644
--- a/Source/CTest/cmCTestTestHandler.cxx
+++ b/Source/CTest/cmCTestTestHandler.cxx
@@ -59,11 +59,11 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "subdirs";}
+ virtual const char* GetName() const { return "subdirs";}
// Unused methods
- virtual const char* GetTerseDocumentation() { return ""; }
- virtual const char* GetFullDocumentation() { return ""; }
+ virtual const char* GetTerseDocumentation() const { return ""; }
+ virtual const char* GetFullDocumentation() const { return ""; }
cmTypeMacro(cmCTestSubdirCommand, cmCommand);
@@ -161,11 +161,11 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "add_subdirectory";}
+ virtual const char* GetName() const { return "add_subdirectory";}
// Unused methods
- virtual const char* GetTerseDocumentation() { return ""; }
- virtual const char* GetFullDocumentation() { return ""; }
+ virtual const char* GetTerseDocumentation() const { return ""; }
+ virtual const char* GetFullDocumentation() const { return ""; }
cmTypeMacro(cmCTestAddSubdirectoryCommand, cmCommand);
@@ -251,11 +251,11 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ADD_TEST";}
+ virtual const char* GetName() const { return "ADD_TEST";}
// Unused methods
- virtual const char* GetTerseDocumentation() { return ""; }
- virtual const char* GetFullDocumentation() { return ""; }
+ virtual const char* GetTerseDocumentation() const { return ""; }
+ virtual const char* GetFullDocumentation() const { return ""; }
cmTypeMacro(cmCTestAddTestCommand, cmCommand);
@@ -299,11 +299,11 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "SET_TESTS_PROPERTIES";}
+ virtual const char* GetName() const { return "SET_TESTS_PROPERTIES";}
// Unused methods
- virtual const char* GetTerseDocumentation() { return ""; }
- virtual const char* GetFullDocumentation() { return ""; }
+ virtual const char* GetTerseDocumentation() const { return ""; }
+ virtual const char* GetFullDocumentation() const { return ""; }
cmTypeMacro(cmCTestSetTestsPropertiesCommand, cmCommand);
diff --git a/Source/CTest/cmCTestUpdateCommand.h b/Source/CTest/cmCTestUpdateCommand.h
index 7f36928..c578fff 100644
--- a/Source/CTest/cmCTestUpdateCommand.h
+++ b/Source/CTest/cmCTestUpdateCommand.h
@@ -39,12 +39,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_update";}
+ virtual const char* GetName() const { return "ctest_update";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Update the work tree from version control.";
}
@@ -52,7 +52,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_update([SOURCE source] [RETURN_VALUE res])\n"
diff --git a/Source/CTest/cmCTestUploadCommand.h b/Source/CTest/cmCTestUploadCommand.h
index 6c2a4c2..62f379f 100644
--- a/Source/CTest/cmCTestUploadCommand.h
+++ b/Source/CTest/cmCTestUploadCommand.h
@@ -43,12 +43,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "ctest_upload";}
+ virtual const char* GetName() const { return "ctest_upload";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Upload files to a dashboard server.";
}
@@ -56,7 +56,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" ctest_upload(FILES ...)\n"
diff --git a/Source/cmAddCustomCommandCommand.h b/Source/cmAddCustomCommandCommand.h
index 05e7dc2..1f770ed 100644
--- a/Source/cmAddCustomCommandCommand.h
+++ b/Source/cmAddCustomCommandCommand.h
@@ -44,12 +44,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "add_custom_command";}
+ virtual const char* GetName() const {return "add_custom_command";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Add a custom build rule to the generated build system.";
}
@@ -57,7 +57,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"There are two main signatures for add_custom_command "
diff --git a/Source/cmAddCustomTargetCommand.h b/Source/cmAddCustomTargetCommand.h
index 6d94fb2..50bffef 100644
--- a/Source/cmAddCustomTargetCommand.h
+++ b/Source/cmAddCustomTargetCommand.h
@@ -42,13 +42,13 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName()
+ virtual const char* GetName() const
{return "add_custom_target";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Add a target with no output so it will always be built.";
}
@@ -56,7 +56,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" add_custom_target(Name [ALL] [command1 [args1...]]\n"
diff --git a/Source/cmAddDefinitionsCommand.h b/Source/cmAddDefinitionsCommand.h
index 0617f04..7bb3767 100644
--- a/Source/cmAddDefinitionsCommand.h
+++ b/Source/cmAddDefinitionsCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "add_definitions";}
+ virtual const char* GetName() const {return "add_definitions";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Adds -D define flags to the compilation of source files.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" add_definitions(-DFOO -DBAR ...)\n"
diff --git a/Source/cmAddDependenciesCommand.h b/Source/cmAddDependenciesCommand.h
index fee011c..14a7741 100644
--- a/Source/cmAddDependenciesCommand.h
+++ b/Source/cmAddDependenciesCommand.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "add_dependencies";}
+ virtual const char* GetName() const { return "add_dependencies";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Add a dependency between top-level targets.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" add_dependencies(target-name depend-target1\n"
diff --git a/Source/cmAddExecutableCommand.h b/Source/cmAddExecutableCommand.h
index 6834f58..1e9f9b3 100644
--- a/Source/cmAddExecutableCommand.h
+++ b/Source/cmAddExecutableCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "add_executable";}
+ virtual const char* GetName() const { return "add_executable";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return
"Add an executable to the project using the specified source files.";
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" add_executable(<name> [WIN32] [MACOSX_BUNDLE]\n"
diff --git a/Source/cmAddLibraryCommand.cxx b/Source/cmAddLibraryCommand.cxx
index 9a776fb..c1d0e9d 100644
--- a/Source/cmAddLibraryCommand.cxx
+++ b/Source/cmAddLibraryCommand.cxx
@@ -64,6 +64,12 @@ bool cmAddLibraryCommand
type = cmTarget::MODULE_LIBRARY;
haveSpecifiedType = true;
}
+ else if(libType == "OBJECT")
+ {
+ ++s;
+ type = cmTarget::OBJECT_LIBRARY;
+ haveSpecifiedType = true;
+ }
else if(libType == "UNKNOWN")
{
++s;
@@ -118,6 +124,14 @@ bool cmAddLibraryCommand
this->SetError("called with IMPORTED argument but no library type.");
return false;
}
+ if(type == cmTarget::OBJECT_LIBRARY)
+ {
+ this->Makefile->IssueMessage(
+ cmake::FATAL_ERROR,
+ "The OBJECT library type may not be used for IMPORTED libraries."
+ );
+ return true;
+ }
// Make sure the target does not already exist.
if(this->Makefile->FindTargetToUse(libName.c_str()))
diff --git a/Source/cmAddLibraryCommand.h b/Source/cmAddLibraryCommand.h
index edca1bb..9ca9cbe 100644
--- a/Source/cmAddLibraryCommand.h
+++ b/Source/cmAddLibraryCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "add_library";}
+ virtual const char* GetName() const { return "add_library";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Add a library to the project using the specified source files.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" add_library(<name> [STATIC | SHARED | MODULE]\n"
diff --git a/Source/cmAddSubDirectoryCommand.h b/Source/cmAddSubDirectoryCommand.h
index dae705e..3d6f51e 100644
--- a/Source/cmAddSubDirectoryCommand.h
+++ b/Source/cmAddSubDirectoryCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "add_subdirectory";}
+ virtual const char* GetName() const { return "add_subdirectory";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Add a subdirectory to the build.";
}
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" add_subdirectory(source_dir [binary_dir] \n"
diff --git a/Source/cmAddTestCommand.h b/Source/cmAddTestCommand.h
index edaf12c..59f10f6 100644
--- a/Source/cmAddTestCommand.h
+++ b/Source/cmAddTestCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "add_test";}
+ virtual const char* GetName() const { return "add_test";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Add a test to the project with the specified arguments.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" add_test(testname Exename arg1 arg2 ... )\n"
diff --git a/Source/cmAuxSourceDirectoryCommand.h b/Source/cmAuxSourceDirectoryCommand.h
index 704e2ed..f059e44 100644
--- a/Source/cmAuxSourceDirectoryCommand.h
+++ b/Source/cmAuxSourceDirectoryCommand.h
@@ -44,12 +44,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "aux_source_directory";}
+ virtual const char* GetName() const { return "aux_source_directory";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Find all source files in a directory.";
}
@@ -57,7 +57,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" aux_source_directory(<dir> <variable>)\n"
diff --git a/Source/cmBreakCommand.h b/Source/cmBreakCommand.h
index 72796e8..67ef37e 100644
--- a/Source/cmBreakCommand.h
+++ b/Source/cmBreakCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "break";}
+ virtual const char* GetName() const {return "break";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Break from an enclosing foreach or while loop.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" break()\n"
diff --git a/Source/cmBuildCommand.h b/Source/cmBuildCommand.h
index 1d247d2..a333c5d 100644
--- a/Source/cmBuildCommand.h
+++ b/Source/cmBuildCommand.h
@@ -50,12 +50,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "build_command";}
+ virtual const char* GetName() const {return "build_command";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get the command line to build this project.";
}
@@ -63,7 +63,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" build_command(<variable>\n"
diff --git a/Source/cmBuildNameCommand.h b/Source/cmBuildNameCommand.h
index 29a680f..26505a2 100644
--- a/Source/cmBuildNameCommand.h
+++ b/Source/cmBuildNameCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "build_name";}
+ virtual const char* GetName() const {return "build_name";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return
"Deprecated. Use ${CMAKE_SYSTEM} and ${CMAKE_CXX_COMPILER} instead.";
@@ -59,7 +59,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" build_name(variable)\n"
@@ -69,7 +69,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmCMakeMinimumRequired.h b/Source/cmCMakeMinimumRequired.h
index 1121386..d23ce79 100644
--- a/Source/cmCMakeMinimumRequired.h
+++ b/Source/cmCMakeMinimumRequired.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "cmake_minimum_required";}
+ virtual const char* GetName() const {return "cmake_minimum_required";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set the minimum required version of cmake for a project.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" cmake_minimum_required(VERSION major[.minor[.patch[.tweak]]]\n"
diff --git a/Source/cmCMakePolicyCommand.h b/Source/cmCMakePolicyCommand.h
index afd3001..4f1ed36 100644
--- a/Source/cmCMakePolicyCommand.h
+++ b/Source/cmCMakePolicyCommand.h
@@ -41,17 +41,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "cmake_policy";}
+ virtual const char* GetName() const {return "cmake_policy";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Manage CMake Policy settings.";
}
@@ -59,7 +59,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"As CMake evolves it is sometimes necessary to change existing "
diff --git a/Source/cmCommand.h b/Source/cmCommand.h
index e046096..4faaee3 100644
--- a/Source/cmCommand.h
+++ b/Source/cmCommand.h
@@ -96,7 +96,7 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable()
+ virtual bool IsScriptable() const
{
return false;
}
@@ -105,7 +105,7 @@ public:
* This determines if usage of the method is discouraged or not.
* This is currently only used for generating the documentation.
*/
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return false;
}
@@ -116,7 +116,7 @@ public:
* cmMacroHelperCommand and cmFunctionHelperCommand
* which cannot provide appropriate documentation.
*/
- virtual bool ShouldAppearInDocumentation()
+ virtual bool ShouldAppearInDocumentation() const
{
return true;
}
@@ -124,17 +124,17 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() = 0;
+ virtual const char* GetName() const = 0;
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation() = 0;
+ virtual const char* GetTerseDocumentation() const = 0;
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation() = 0;
+ virtual const char* GetFullDocumentation() const = 0;
/**
* Enable the command.
@@ -151,7 +151,7 @@ public:
/**
* Query whether the command is enabled.
*/
- bool GetEnabled()
+ bool GetEnabled() const
{return this->Enabled;}
/**
diff --git a/Source/cmCommandArgumentParserHelper.h b/Source/cmCommandArgumentParserHelper.h
index a211e95..cdb832b 100644
--- a/Source/cmCommandArgumentParserHelper.h
+++ b/Source/cmCommandArgumentParserHelper.h
@@ -81,7 +81,6 @@ private:
cmStdString InputBuffer;
std::vector<char> OutputBuffer;
int CurrentLine;
- int UnionsAvailable;
int Verbose;
void Print(const char* place, const char* str);
diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx
index 9a075bd..055aab0 100644
--- a/Source/cmComputeLinkDepends.cxx
+++ b/Source/cmComputeLinkDepends.cxx
@@ -27,7 +27,7 @@
This file computes an ordered list of link items to use when linking a
single target in one configuration. Each link item is identified by
the string naming it. A graph of dependencies is created in which
-each node corresponds to one item and directed eges lead from nodes to
+each node corresponds to one item and directed edges lead from nodes to
those which must *follow* them on the link line. For example, the
graph
@@ -42,7 +42,7 @@ search of the link dependencies starting from the main target.
There are two types of items: those with known direct dependencies and
those without known dependencies. We will call the two types "known
-items" and "unknown items", respecitvely. Known items are those whose
+items" and "unknown items", respectively. Known items are those whose
names correspond to targets (built or imported) and those for which an
old-style <item>_LIB_DEPENDS variable is defined. All other items are
unknown and we must infer dependencies for them. For items that look
@@ -150,7 +150,7 @@ times the component needs to be seen (once for trivial components,
twice for non-trivial). If at any time another component finishes and
re-adds an already pending component, the pending component is reset
so that it needs to be seen in its entirety again. This ensures that
-all dependencies of a component are satisified no matter where it
+all dependencies of a component are satisfied no matter where it
appears.
After the original link line has been completed, we append to it the
@@ -633,6 +633,19 @@ cmTarget* cmComputeLinkDepends::FindTargetToLink(int depender_index,
tgt = 0;
}
+ if(tgt && tgt->GetType() == cmTarget::OBJECT_LIBRARY)
+ {
+ cmOStringStream e;
+ e << "Target \"" << this->Target->GetName() << "\" links to "
+ "OBJECT library \"" << tgt->GetName() << "\" but this is not "
+ "allowed. "
+ "One may link only to STATIC or SHARED libraries, or to executables "
+ "with the ENABLE_EXPORTS property set.";
+ this->CMakeInstance->IssueMessage(cmake::FATAL_ERROR, e.str(),
+ this->Target->GetBacktrace());
+ tgt = 0;
+ }
+
// Return the target found, if any.
return tgt;
}
diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx
index 57fd5b4..df78bf8 100644
--- a/Source/cmComputeLinkInformation.cxx
+++ b/Source/cmComputeLinkInformation.cxx
@@ -1772,6 +1772,7 @@ void cmComputeLinkInformation::GetRPath(std::vector<std::string>& runtimeDirs,
!linking_for_install);
bool use_link_rpath =
outputRuntime && linking_for_install &&
+ !this->Makefile->IsOn("CMAKE_SKIP_INSTALL_RPATH") &&
this->Target->GetPropertyAsBool("INSTALL_RPATH_USE_LINK_PATH");
// Construct the RPATH.
diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx
index 8e701c4..ab77c6b 100644
--- a/Source/cmComputeTargetDepends.cxx
+++ b/Source/cmComputeTargetDepends.cxx
@@ -31,7 +31,7 @@ dependencies for each target such that no cycles are left and the
build order is safe.
For most target types cyclic dependencies are not allowed. However
-STATIC libraries may depend on each other in a cyclic fasion. In
+STATIC libraries may depend on each other in a cyclic fashion. In
general the directed dependency graph forms a directed-acyclic-graph
of strongly connected components. All strongly connected components
should consist of only STATIC_LIBRARY targets.
diff --git a/Source/cmConfigureFileCommand.h b/Source/cmConfigureFileCommand.h
index be33569..de497a9 100644
--- a/Source/cmConfigureFileCommand.h
+++ b/Source/cmConfigureFileCommand.h
@@ -34,17 +34,17 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "configure_file";}
+ virtual const char* GetName() const { return "configure_file";}
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Copy a file to another location and modify its contents.";
}
@@ -52,7 +52,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" configure_file(<input> <output>\n"
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 7d84ba6..48f644b 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -153,11 +153,11 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv)
std::string ccFile = this->BinaryDirectory + "/CMakeCache.txt";
cmSystemTools::RemoveFile(ccFile.c_str());
- // we need to create a directory and CMakeList file etc...
+ // we need to create a directory and CMakeLists file etc...
// first create the directories
sourceDirectory = this->BinaryDirectory.c_str();
- // now create a CMakeList.txt file in that directory
+ // now create a CMakeLists.txt file in that directory
FILE *fout = fopen(outFileName.c_str(),"w");
if (!fout)
{
diff --git a/Source/cmCreateTestSourceList.cxx b/Source/cmCreateTestSourceList.cxx
index 953328a..de20cb7 100644
--- a/Source/cmCreateTestSourceList.cxx
+++ b/Source/cmCreateTestSourceList.cxx
@@ -70,7 +70,7 @@ bool cmCreateTestSourceList
if (cmSystemTools::GetFilenameExtension(*i).size() < 2)
{
this->SetError(
- "You must specify a file extenion for the test driver file.");
+ "You must specify a file extension for the test driver file.");
return false;
}
std::string driver = this->Makefile->GetCurrentOutputDirectory();
diff --git a/Source/cmCreateTestSourceList.h b/Source/cmCreateTestSourceList.h
index c4c6ae7..806e5a9 100644
--- a/Source/cmCreateTestSourceList.h
+++ b/Source/cmCreateTestSourceList.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "create_test_sourcelist";}
+ virtual const char* GetName() const {return "create_test_sourcelist";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Create a test driver and source list for building test programs.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" create_test_sourcelist(sourceListName driverName\n"
diff --git a/Source/cmDefinePropertyCommand.h b/Source/cmDefinePropertyCommand.h
index 1fb7801..55ef521 100644
--- a/Source/cmDefinePropertyCommand.h
+++ b/Source/cmDefinePropertyCommand.h
@@ -32,12 +32,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "define_property";}
+ virtual const char* GetName() const { return "define_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Define and document custom properties.";
}
@@ -45,7 +45,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" define_property(<GLOBAL | DIRECTORY | TARGET | SOURCE |\n"
diff --git a/Source/cmDepends.cxx b/Source/cmDepends.cxx
index 94ff471..9296d4c 100644
--- a/Source/cmDepends.cxx
+++ b/Source/cmDepends.cxx
@@ -261,11 +261,13 @@ bool cmDepends::CheckDependencies(std::istream& internalDepends,
void cmDepends::SetIncludePathFromLanguage(const char* lang)
{
// Look for the new per "TARGET_" variant first:
+ const char * includePath = 0;
std::string includePathVar = "CMAKE_";
includePathVar += lang;
includePathVar += "_TARGET_INCLUDE_PATH";
cmMakefile* mf = this->LocalGenerator->GetMakefile();
- if(const char* includePath = mf->GetDefinition(includePathVar.c_str()))
+ includePath = mf->GetDefinition(includePathVar.c_str());
+ if(includePath)
{
cmSystemTools::ExpandListArgument(includePath, this->IncludePath);
}
@@ -275,7 +277,8 @@ void cmDepends::SetIncludePathFromLanguage(const char* lang)
includePathVar = "CMAKE_";
includePathVar += lang;
includePathVar += "_INCLUDE_PATH";
- if(const char* includePath = mf->GetDefinition(includePathVar.c_str()))
+ includePath = mf->GetDefinition(includePathVar.c_str());
+ if(includePath)
{
cmSystemTools::ExpandListArgument(includePath, this->IncludePath);
}
diff --git a/Source/cmDependsFortran.cxx b/Source/cmDependsFortran.cxx
index 9e4726c..c1b6090 100644
--- a/Source/cmDependsFortran.cxx
+++ b/Source/cmDependsFortran.cxx
@@ -30,7 +30,7 @@
class cmDependsFortranSourceInfo
{
public:
- // The name of the soruce file.
+ // The name of the source file.
std::string Source;
// Set of provided and required modules.
@@ -810,8 +810,8 @@ bool cmDependsFortran::ModulesDiffer(const char* modFile,
* -GNU
* -Intel
*
- * Eat the stream content until all recompile only realated changes
- * are left bedind.
+ * Eat the stream content until all recompile only related changes
+ * are left behind.
*/
if (strcmp(compilerId, "GNU") == 0 )
{
@@ -852,7 +852,7 @@ bool cmDependsFortran::ModulesDiffer(const char* modFile,
}
}
- // Compare the remainng content. If no compiler id matched above,
+ // Compare the remaining content. If no compiler id matched above,
// including the case none was given, this will compare the whole
// content.
if(!cmDependsFortranStreamsDiffer(finModFile, finStampFile))
@@ -1209,7 +1209,7 @@ void cmDependsFortranParser_RuleElif(cmDependsFortranParser* parser)
* cmDependsFortranParser_RuleIf(..)
*/
- // Allways taken unless an #ifdef or #ifndef-branch has been taken
+ // Always taken unless an #ifdef or #ifndef-branch has been taken
// already. If the second condition isn't meet already
// (parser->InPPFalseBranch == 0) correct it.
if(!parser->SkipToEnd.empty() &&
@@ -1228,7 +1228,7 @@ void cmDependsFortranParser_RuleElse(cmDependsFortranParser* parser)
return;
}
- // parser->InPPFalseBranch is either 0 or 1. We change it denpending on
+ // parser->InPPFalseBranch is either 0 or 1. We change it depending on
// parser->SkipToEnd.top()
if(!parser->SkipToEnd.empty() &&
parser->SkipToEnd.top())
diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx
index 1cab2b5..897e516 100644
--- a/Source/cmDocumentVariables.cxx
+++ b/Source/cmDocumentVariables.cxx
@@ -355,7 +355,9 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"If this is set to TRUE, then the rpath information "
"is not added to compiled executables. The default "
"is to add rpath information if the platform supports it. "
- "This allows for easy running from the build tree.",false,
+ "This allows for easy running from the build tree. To omit RPATH"
+ "in the install step, but not the build step, use "
+ "CMAKE_SKIP_INSTALL_RPATH instead.",false,
"Variables that Provide Information");
cm->DefineProperty
("CMAKE_SOURCE_DIR", cmProperty::VARIABLE,
@@ -746,6 +748,26 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Variables That Change Behavior");
cm->DefineProperty
+ ("CMAKE_FIND_PACKAGE_WARN_NO_MODULE", cmProperty::VARIABLE,
+ "Tell find_package to warn if called without an explicit mode.",
+ "If find_package is called without an explicit mode option "
+ "(MODULE, CONFIG or NO_MODULE) and no Find<pkg>.cmake module is "
+ "in CMAKE_MODULE_PATH then CMake implicitly assumes that the "
+ "caller intends to search for a package configuration file. "
+ "If no package configuration file is found then the wording "
+ "of the failure message must account for both the case that the "
+ "package is really missing and the case that the project has a "
+ "bug and failed to provide the intended Find module. "
+ "If instead the caller specifies an explicit mode option then "
+ "the failure message can be more specific."
+ "\n"
+ "Set CMAKE_FIND_PACKAGE_WARN_NO_MODULE to TRUE to tell find_package "
+ "to warn when it implicitly assumes Config mode. "
+ "This helps developers enforce use of an explicit mode in all calls "
+ "to find_package within a project.", false,
+ "Variables That Change Behavior");
+
+ cm->DefineProperty
("CMAKE_USER_MAKE_RULES_OVERRIDE", cmProperty::VARIABLE,
"Specify a CMake file that overrides platform information.",
"CMake loads the specified file while enabling support for each "
@@ -895,7 +917,7 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
cm->DefineProperty
("BORLAND", cmProperty::VARIABLE,
- "True of the borland compiler is being used.",
+ "True if the borland compiler is being used.",
"This is set to true if the Borland compiler is being used.",false,
"Variables That Describe the System");
@@ -1181,6 +1203,20 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Variables that Control the Build");
cm->DefineProperty
+ ("CMAKE_SKIP_INSTALL_RPATH", cmProperty::VARIABLE,
+ "Do not include RPATHs in the install tree.",
+ "Normally CMake uses the build tree for the RPATH when building "
+ "executables etc on systems that use RPATH. When the software "
+ "is installed the executables etc are relinked by CMake to have "
+ "the install RPATH. If this variable is set to true then the software "
+ "is always installed without RPATH, even if RPATH is enabled when "
+ "building. This can be useful for example to allow running tests from "
+ "the build directory with RPATH enabled before the installation step. "
+ "To omit RPATH in both the build and install steps, use "
+ "CMAKE_SKIP_RPATH instead.",false,
+ "Variables that Control the Build");
+
+ cm->DefineProperty
("CMAKE_EXE_LINKER_FLAGS", cmProperty::VARIABLE,
"Linker flags used to create executables.",
"Flags used by the linker when creating an executable.",false,
@@ -1258,6 +1294,22 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"See that target property for additional information.",
false,
"Variables that Control the Build");
+ cm->DefineProperty
+ ("CMAKE_WIN32_EXECUTABLE", cmProperty::VARIABLE,
+ "Default value for WIN32_EXECUTABLE of targets.",
+ "This variable is used to initialize the "
+ "WIN32_EXECUTABLE property on all the targets. "
+ "See that target property for additional information.",
+ false,
+ "Variables that Control the Build");
+ cm->DefineProperty
+ ("CMAKE_MACOSX_BUNDLE", cmProperty::VARIABLE,
+ "Default value for MACOSX_BUNDLE of targets.",
+ "This variable is used to initialize the "
+ "MACOSX_BUNDLE property on all the targets. "
+ "See that target property for additional information.",
+ false,
+ "Variables that Control the Build");
// Variables defined when the a language is enabled These variables will
// also be defined whenever CMake has loaded its support for compiling (LANG)
diff --git a/Source/cmElseCommand.h b/Source/cmElseCommand.h
index bbe31f4..5e8b790 100644
--- a/Source/cmElseCommand.h
+++ b/Source/cmElseCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "else";}
+ virtual const char* GetName() const { return "else";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Starts the else portion of an if block.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" else(expression)\n"
diff --git a/Source/cmElseIfCommand.h b/Source/cmElseIfCommand.h
index cca5fb8..20cd81a 100644
--- a/Source/cmElseIfCommand.h
+++ b/Source/cmElseIfCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "elseif";}
+ virtual const char* GetName() const { return "elseif";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Starts the elseif portion of an if block.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" elseif(expression)\n"
diff --git a/Source/cmEnableLanguageCommand.h b/Source/cmEnableLanguageCommand.h
index e934119..5958e44 100644
--- a/Source/cmEnableLanguageCommand.h
+++ b/Source/cmEnableLanguageCommand.h
@@ -43,12 +43,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "enable_language";}
+ virtual const char* GetName() const {return "enable_language";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Enable a language (CXX/C/Fortran/etc)";
}
@@ -56,7 +56,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" enable_language(languageName [OPTIONAL] )\n"
diff --git a/Source/cmEnableTestingCommand.h b/Source/cmEnableTestingCommand.h
index 7361241..b607818 100644
--- a/Source/cmEnableTestingCommand.h
+++ b/Source/cmEnableTestingCommand.h
@@ -48,12 +48,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "enable_testing";}
+ virtual const char* GetName() const { return "enable_testing";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Enable testing for current directory and below.";
}
@@ -61,7 +61,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" enable_testing()\n"
diff --git a/Source/cmEndForEachCommand.h b/Source/cmEndForEachCommand.h
index 7ceb39d..37b2d2a 100644
--- a/Source/cmEndForEachCommand.h
+++ b/Source/cmEndForEachCommand.h
@@ -47,17 +47,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "endforeach";}
+ virtual const char* GetName() const { return "endforeach";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Ends a list of commands in a FOREACH block.";
}
@@ -65,7 +65,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" endforeach(expression)\n"
diff --git a/Source/cmEndFunctionCommand.h b/Source/cmEndFunctionCommand.h
index 2d58c9d..54ac068 100644
--- a/Source/cmEndFunctionCommand.h
+++ b/Source/cmEndFunctionCommand.h
@@ -47,17 +47,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "endfunction";}
+ virtual const char* GetName() const { return "endfunction";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Ends a list of commands in a function block.";
}
@@ -65,7 +65,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" endfunction(expression)\n"
diff --git a/Source/cmEndIfCommand.h b/Source/cmEndIfCommand.h
index f0af8c6..81d1b5f 100644
--- a/Source/cmEndIfCommand.h
+++ b/Source/cmEndIfCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "endif";}
+ virtual const char* GetName() const { return "endif";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Ends a list of commands in an if block.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" endif(expression)\n"
diff --git a/Source/cmEndMacroCommand.h b/Source/cmEndMacroCommand.h
index 52b7e82..25e86b7 100644
--- a/Source/cmEndMacroCommand.h
+++ b/Source/cmEndMacroCommand.h
@@ -47,17 +47,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "endmacro";}
+ virtual const char* GetName() const { return "endmacro";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Ends a list of commands in a macro block.";
}
@@ -65,7 +65,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" endmacro(expression)\n"
diff --git a/Source/cmEndWhileCommand.cxx b/Source/cmEndWhileCommand.cxx
index bb4d40a..abb9e5e 100644
--- a/Source/cmEndWhileCommand.cxx
+++ b/Source/cmEndWhileCommand.cxx
@@ -12,12 +12,21 @@
#include "cmEndWhileCommand.h"
bool cmEndWhileCommand
-::InvokeInitialPass(std::vector<cmListFileArgument> const&,
+::InvokeInitialPass(std::vector<cmListFileArgument> const& args,
cmExecutionStatus &)
{
- this->SetError("An ENDWHILE command was found outside of a proper "
- "WHILE ENDWHILE structure. Or its arguments did not "
- "match the opening WHILE command.");
+ if (args.empty())
+ {
+ this->SetError("An ENDWHILE command was found outside of a proper "
+ "WHILE ENDWHILE structure.");
+ }
+ else
+ {
+ this->SetError("An ENDWHILE command was found outside of a proper "
+ "WHILE ENDWHILE structure. Or its arguments did not "
+ "match the opening WHILE command.");
+ }
+
return false;
}
diff --git a/Source/cmEndWhileCommand.h b/Source/cmEndWhileCommand.h
index 8e0b488..635ad5a 100644
--- a/Source/cmEndWhileCommand.h
+++ b/Source/cmEndWhileCommand.h
@@ -34,7 +34,7 @@ public:
* Override cmCommand::InvokeInitialPass to get arguments before
* expansion.
*/
- virtual bool InvokeInitialPass(std::vector<cmListFileArgument> const&,
+ virtual bool InvokeInitialPass(std::vector<cmListFileArgument> const& args,
cmExecutionStatus &status);
/**
@@ -47,17 +47,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "endwhile";}
+ virtual const char* GetName() const { return "endwhile";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Ends a list of commands in a while block.";
}
@@ -65,7 +65,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" endwhile(expression)\n"
diff --git a/Source/cmExecProgramCommand.h b/Source/cmExecProgramCommand.h
index ef3a732..7233860 100644
--- a/Source/cmExecProgramCommand.h
+++ b/Source/cmExecProgramCommand.h
@@ -42,18 +42,18 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName()
+ virtual const char* GetName() const
{return "exec_program";}
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return
"Deprecated. Use the execute_process() command instead.";
@@ -62,7 +62,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"Run an executable program during the processing of the CMakeList.txt"
@@ -84,7 +84,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmExecuteProcessCommand.h b/Source/cmExecuteProcessCommand.h
index 3cd8f01..0e20a4b 100644
--- a/Source/cmExecuteProcessCommand.h
+++ b/Source/cmExecuteProcessCommand.h
@@ -41,18 +41,18 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName()
+ virtual const char* GetName() const
{return "execute_process";}
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Execute one or more child processes.";
}
@@ -60,7 +60,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" execute_process(COMMAND <cmd1> [args1...]]\n"
diff --git a/Source/cmExportCommand.cxx b/Source/cmExportCommand.cxx
index cb614d4..1cc1754 100644
--- a/Source/cmExportCommand.cxx
+++ b/Source/cmExportCommand.cxx
@@ -124,6 +124,14 @@ bool cmExportCommand
{
targets.push_back(target);
}
+ else if(target->GetType() == cmTarget::OBJECT_LIBRARY)
+ {
+ cmOStringStream e;
+ e << "given OBJECT library \"" << *currentTarget
+ << "\" which may not be exported.";
+ this->SetError(e.str().c_str());
+ return false;
+ }
else
{
cmOStringStream e;
diff --git a/Source/cmExportCommand.h b/Source/cmExportCommand.h
index eb19d2e..ae67b47 100644
--- a/Source/cmExportCommand.h
+++ b/Source/cmExportCommand.h
@@ -45,12 +45,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "export";}
+ virtual const char* GetName() const { return "export";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return
"Export targets from the build tree for use by outside projects.";
@@ -59,7 +59,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" export(TARGETS [target1 [target2 [...]]] [NAMESPACE <namespace>]\n"
diff --git a/Source/cmExportLibraryDependencies.h b/Source/cmExportLibraryDependencies.h
index 32c262f..2a2ff21 100644
--- a/Source/cmExportLibraryDependencies.h
+++ b/Source/cmExportLibraryDependencies.h
@@ -48,12 +48,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "export_library_dependencies";}
+ virtual const char* GetName() const { return "export_library_dependencies";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use INSTALL(EXPORT) or EXPORT command.";
}
@@ -61,7 +61,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"This command generates an old-style library dependencies file. "
@@ -83,7 +83,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmExprParserHelper.cxx b/Source/cmExprParserHelper.cxx
index ee37352..7728d74 100644
--- a/Source/cmExprParserHelper.cxx
+++ b/Source/cmExprParserHelper.cxx
@@ -30,12 +30,6 @@ cmExprParserHelper::~cmExprParserHelper()
this->CleanupParser();
}
-void cmExprParserHelper::SetLineFile(long line, const char* file)
-{
- this->FileLine = line;
- this->FileName = file;
-}
-
int cmExprParserHelper::ParseString(const char* str, int verb)
{
if ( !str)
diff --git a/Source/cmExprParserHelper.h b/Source/cmExprParserHelper.h
index 0c36b44..690426d 100644
--- a/Source/cmExprParserHelper.h
+++ b/Source/cmExprParserHelper.h
@@ -46,8 +46,6 @@ public:
int GetResult() { return this->Result; }
- void SetLineFile(long line, const char* file);
-
const char* GetError() { return this->ErrorString.c_str(); }
private:
@@ -55,7 +53,6 @@ private:
cmStdString InputBuffer;
std::vector<char> OutputBuffer;
int CurrentLine;
- int UnionsAvailable;
int Verbose;
void Print(const char* place, const char* str);
diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx
index b5cba8e..ccb17f0 100644
--- a/Source/cmExtraCodeBlocksGenerator.cxx
+++ b/Source/cmExtraCodeBlocksGenerator.cxx
@@ -392,10 +392,6 @@ void cmExtraCodeBlocksGenerator
make.c_str(), makefile, compiler.c_str());
}
break;
- // ignore these:
- case cmTarget::INSTALL_FILES:
- case cmTarget::INSTALL_PROGRAMS:
- case cmTarget::INSTALL_DIRECTORY:
default:
break;
}
diff --git a/Source/cmExtraEclipseCDT4Generator.cxx b/Source/cmExtraEclipseCDT4Generator.cxx
index 19372c8..ebd7c7f 100644
--- a/Source/cmExtraEclipseCDT4Generator.cxx
+++ b/Source/cmExtraEclipseCDT4Generator.cxx
@@ -1049,10 +1049,6 @@ void cmExtraEclipseCDT4Generator::CreateCProjectFile() const
}
}
break;
- // ignore these:
- case cmTarget::INSTALL_FILES:
- case cmTarget::INSTALL_PROGRAMS:
- case cmTarget::INSTALL_DIRECTORY:
default:
break;
}
diff --git a/Source/cmFLTKWrapUICommand.h b/Source/cmFLTKWrapUICommand.h
index 6ecdbcc..cb0f9d5 100644
--- a/Source/cmFLTKWrapUICommand.h
+++ b/Source/cmFLTKWrapUICommand.h
@@ -52,12 +52,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "fltk_wrap_ui";}
+ virtual const char* GetName() const { return "fltk_wrap_ui";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Create FLTK user interfaces Wrappers.";
}
@@ -65,7 +65,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" fltk_wrap_ui(resultingLibraryName source1\n"
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 6df5ab3..3f14fa1 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -12,6 +12,7 @@
#include "cmFileCommand.h"
#include "cmake.h"
#include "cmHexFileConverter.h"
+#include "cmInstallType.h"
#include "cmFileTimeComparison.h"
#include "cmCryptoHash.h"
@@ -1690,7 +1691,7 @@ struct cmFileInstaller: public cmFileCopier
{
cmFileInstaller(cmFileCommand* command):
cmFileCopier(command, "INSTALL"),
- InstallType(cmTarget::INSTALL_FILES),
+ InstallType(cmInstallType_FILES),
Optional(false),
DestDirLength(0)
{
@@ -1711,7 +1712,7 @@ struct cmFileInstaller: public cmFileCopier
}
protected:
- cmTarget::TargetType InstallType;
+ cmInstallType InstallType;
bool Optional;
int DestDirLength;
std::string Rename;
@@ -1745,7 +1746,7 @@ protected:
virtual bool Install(const char* fromFile, const char* toFile)
{
// Support installing from empty source to make a directory.
- if(this->InstallType == cmTarget::INSTALL_DIRECTORY && !*fromFile)
+ if(this->InstallType == cmInstallType_DIRECTORY && !*fromFile)
{
return this->InstallDirectory(fromFile, toFile, MatchProperties());
}
@@ -1767,14 +1768,14 @@ protected:
// Add execute permissions based on the target type.
switch(this->InstallType)
{
- case cmTarget::SHARED_LIBRARY:
- case cmTarget::MODULE_LIBRARY:
+ case cmInstallType_SHARED_LIBRARY:
+ case cmInstallType_MODULE_LIBRARY:
if(this->Makefile->IsOn("CMAKE_INSTALL_SO_NO_EXE"))
{
break;
}
- case cmTarget::EXECUTABLE:
- case cmTarget::INSTALL_PROGRAMS:
+ case cmInstallType_EXECUTABLE:
+ case cmInstallType_PROGRAMS:
this->FilePermissions |= mode_owner_execute;
this->FilePermissions |= mode_group_execute;
this->FilePermissions |= mode_world_execute;
@@ -1796,8 +1797,8 @@ bool cmFileInstaller::Parse(std::vector<std::string> const& args)
if(!this->Rename.empty())
{
- if(this->InstallType != cmTarget::INSTALL_FILES &&
- this->InstallType != cmTarget::INSTALL_PROGRAMS)
+ if(this->InstallType != cmInstallType_FILES &&
+ this->InstallType != cmInstallType_PROGRAMS)
{
this->FileCommand->SetError("INSTALL option RENAME may be used "
"only with FILES or PROGRAMS.");
@@ -1936,31 +1937,31 @@ bool cmFileInstaller
{
if ( stype == "EXECUTABLE" )
{
- this->InstallType = cmTarget::EXECUTABLE;
+ this->InstallType = cmInstallType_EXECUTABLE;
}
else if ( stype == "FILE" )
{
- this->InstallType = cmTarget::INSTALL_FILES;
+ this->InstallType = cmInstallType_FILES;
}
else if ( stype == "PROGRAM" )
{
- this->InstallType = cmTarget::INSTALL_PROGRAMS;
+ this->InstallType = cmInstallType_PROGRAMS;
}
else if ( stype == "STATIC_LIBRARY" )
{
- this->InstallType = cmTarget::STATIC_LIBRARY;
+ this->InstallType = cmInstallType_STATIC_LIBRARY;
}
else if ( stype == "SHARED_LIBRARY" )
{
- this->InstallType = cmTarget::SHARED_LIBRARY;
+ this->InstallType = cmInstallType_SHARED_LIBRARY;
}
else if ( stype == "MODULE" )
{
- this->InstallType = cmTarget::MODULE_LIBRARY;
+ this->InstallType = cmInstallType_MODULE_LIBRARY;
}
else if ( stype == "DIRECTORY" )
{
- this->InstallType = cmTarget::INSTALL_DIRECTORY;
+ this->InstallType = cmInstallType_DIRECTORY;
}
else
{
diff --git a/Source/cmFileCommand.h b/Source/cmFileCommand.h
index 9e2ed0f..3b368fa 100644
--- a/Source/cmFileCommand.h
+++ b/Source/cmFileCommand.h
@@ -41,17 +41,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "file";}
+ virtual const char* GetName() const { return "file";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "File manipulation command.";
}
@@ -59,7 +59,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" file(WRITE filename \"message to write\"... )\n"
diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx
index 183da4a..fb8bcf7 100644
--- a/Source/cmFindBase.cxx
+++ b/Source/cmFindBase.cxx
@@ -108,11 +108,11 @@ void cmFindBase::GenerateDocumentation()
}
//----------------------------------------------------------------------------
-const char* cmFindBase::GetFullDocumentation()
+const char* cmFindBase::GetFullDocumentation() const
{
if(this->GenericDocumentation.empty())
{
- this->GenerateDocumentation();
+ const_cast<cmFindBase *>(this)->GenerateDocumentation();
}
return this->GenericDocumentation.c_str();
}
diff --git a/Source/cmFindBase.h b/Source/cmFindBase.h
index de319b1..37ab2ec 100644
--- a/Source/cmFindBase.h
+++ b/Source/cmFindBase.h
@@ -31,7 +31,7 @@ public:
virtual bool ParseArguments(std::vector<std::string> const& args);
cmTypeMacro(cmFindBase, cmFindCommon);
- virtual const char* GetFullDocumentation();
+ virtual const char* GetFullDocumentation() const;
protected:
virtual void GenerateDocumentation();
diff --git a/Source/cmFindFileCommand.h b/Source/cmFindFileCommand.h
index dd2e01d..7d349d3 100644
--- a/Source/cmFindFileCommand.h
+++ b/Source/cmFindFileCommand.h
@@ -33,12 +33,12 @@ public:
{
return new cmFindFileCommand;
}
- virtual const char* GetName() { return "find_file";}
+ virtual const char* GetName() const { return "find_file";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Find the full path to a file.";
}
diff --git a/Source/cmFindLibraryCommand.h b/Source/cmFindLibraryCommand.h
index 7930f52..b880be2 100644
--- a/Source/cmFindLibraryCommand.h
+++ b/Source/cmFindLibraryCommand.h
@@ -44,17 +44,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "find_library";}
+ virtual const char* GetName() const {return "find_library";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Find a library.";
}
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 22bb628..f17002e 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -57,7 +57,8 @@ cmFindPackageCommand::cmFindPackageCommand()
this->NoUserRegistry = false;
this->NoSystemRegistry = false;
this->NoBuilds = false;
- this->NoModule = false;
+ this->UseConfigFiles = true;
+ this->UseFindModules = true;
this->DebugMode = false;
this->UseLib64Paths = false;
this->PolicyScope = true;
@@ -72,6 +73,7 @@ cmFindPackageCommand::cmFindPackageCommand()
this->VersionFoundPatch = 0;
this->VersionFoundTweak = 0;
this->VersionFoundCount = 0;
+ this->RequiredCMakeVersion = 0;
}
//----------------------------------------------------------------------------
@@ -86,7 +88,7 @@ void cmFindPackageCommand::GenerateDocumentation()
cmSystemTools::ReplaceString(this->GenericDocumentationPathsOrder,
"FIND_XXX", "find_package");
this->CommandDocumentation =
- " find_package(<package> [version] [EXACT] [QUIET]\n"
+ " find_package(<package> [version] [EXACT] [QUIET] [MODULE]\n"
" [[REQUIRED|COMPONENTS] [components...]]\n"
" [NO_POLICY_SCOPE])\n"
"Finds and loads settings from an external project. "
@@ -94,6 +96,7 @@ void cmFindPackageCommand::GenerateDocumentation()
"When the package is found package-specific information is provided "
"through variables documented by the package itself. "
"The QUIET option disables messages if the package cannot be found. "
+ "The MODULE option disables the second signature documented below. "
"The REQUIRED option stops processing with an error message if the "
"package cannot be found. "
"A package-specific list of components may be listed after the "
@@ -124,10 +127,12 @@ void cmFindPackageCommand::GenerateDocumentation()
"and producing any needed messages. "
"Many find-modules provide limited or no support for versioning; "
"check the module documentation. "
- "If no module is found the command proceeds to Config mode.\n"
+ "If no module is found and the MODULE option is not given the command "
+ "proceeds to Config mode.\n"
"The complete Config mode command signature is:\n"
" find_package(<package> [version] [EXACT] [QUIET]\n"
- " [[REQUIRED|COMPONENTS] [components...]] [NO_MODULE]\n"
+ " [[REQUIRED|COMPONENTS] [components...]]\n"
+ " [CONFIG|NO_MODULE]\n"
" [NO_POLICY_SCOPE]\n"
" [NAMES name1 [name2 ...]]\n"
" [CONFIGS config1 [config2 ...]]\n"
@@ -145,9 +150,10 @@ void cmFindPackageCommand::GenerateDocumentation()
" [CMAKE_FIND_ROOT_PATH_BOTH |\n"
" ONLY_CMAKE_FIND_ROOT_PATH |\n"
" NO_CMAKE_FIND_ROOT_PATH])\n"
- "The NO_MODULE option may be used to skip Module mode explicitly. "
- "It is also implied by use of options not specified in the reduced "
- "signature. "
+ "The CONFIG option may be used to skip Module mode explicitly and "
+ "switch to Config mode. It is synonymous to using NO_MODULE. "
+ "Config mode is also implied by use of options not specified in the "
+ "reduced signature. "
"\n"
"Config mode attempts to locate a configuration file provided by the "
"package to be found. A cache entry called <package>_DIR is created to "
@@ -192,7 +198,7 @@ void cmFindPackageCommand::GenerateDocumentation()
"If no such version file is available then the configuration file "
"is assumed to not be compatible with any requested version. "
"A basic version file containing generic version matching code can be "
- "created using the macro write_basic_config_version_file(), see its "
+ "created using the macro write_basic_package_version_file(), see its "
"documentation for more details. "
"When a version file is found it is loaded to check the requested "
"version number. "
@@ -348,11 +354,11 @@ void cmFindPackageCommand::GenerateDocumentation()
}
//----------------------------------------------------------------------------
-const char* cmFindPackageCommand::GetFullDocumentation()
+const char* cmFindPackageCommand::GetFullDocumentation() const
{
if(this->CommandDocumentation.empty())
{
- this->GenerateDocumentation();
+ const_cast<cmFindPackageCommand *>(this)->GenerateDocumentation();
}
return this->CommandDocumentation.c_str();
}
@@ -367,6 +373,15 @@ bool cmFindPackageCommand
return false;
}
+ // Lookup required version of CMake.
+ if(const char* rv =
+ this->Makefile->GetDefinition("CMAKE_MINIMUM_REQUIRED_VERSION"))
+ {
+ unsigned int v[3] = {0,0,0};
+ sscanf(rv, "%u.%u.%u", &v[0], &v[1], &v[2]);
+ this->RequiredCMakeVersion = CMake_VERSION_ENCODE(v[0],v[1],v[2]);
+ }
+
// Check for debug mode.
this->DebugMode = this->Makefile->IsOn("CMAKE_FIND_DEBUG_MODE");
@@ -410,6 +425,8 @@ bool cmFindPackageCommand
Doing doing = DoingNone;
cmsys::RegularExpression version("^[0-9.]+$");
bool haveVersion = false;
+ std::set<unsigned int> configArgs;
+ std::set<unsigned int> moduleArgs;
for(unsigned int i=1; i < args.size(); ++i)
{
if(args[i] == "QUIET")
@@ -423,9 +440,19 @@ bool cmFindPackageCommand
this->Compatibility_1_6 = false;
doing = DoingNone;
}
+ else if(args[i] == "MODULE")
+ {
+ moduleArgs.insert(i);
+ doing = DoingNone;
+ }
+ else if(args[i] == "CONFIG")
+ {
+ configArgs.insert(i);
+ doing = DoingNone;
+ }
else if(args[i] == "NO_MODULE")
{
- this->NoModule = true;
+ configArgs.insert(i);
doing = DoingNone;
}
else if(args[i] == "REQUIRED")
@@ -440,31 +467,31 @@ bool cmFindPackageCommand
}
else if(args[i] == "NAMES")
{
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingNames;
}
else if(args[i] == "PATHS")
{
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingPaths;
}
else if(args[i] == "HINTS")
{
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingHints;
}
else if(args[i] == "PATH_SUFFIXES")
{
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingPathSuffixes;
}
else if(args[i] == "CONFIGS")
{
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingConfigs;
}
@@ -477,27 +504,27 @@ bool cmFindPackageCommand
else if(args[i] == "NO_CMAKE_PACKAGE_REGISTRY")
{
this->NoUserRegistry = true;
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingNone;
}
else if(args[i] == "NO_CMAKE_SYSTEM_PACKAGE_REGISTRY")
{
this->NoSystemRegistry = true;
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingNone;
}
else if(args[i] == "NO_CMAKE_BUILDS_PATH")
{
this->NoBuilds = true;
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingNone;
}
else if(this->CheckCommonArgument(args[i]))
{
- this->NoModule = true;
+ configArgs.insert(i);
this->Compatibility_1_6 = false;
doing = DoingNone;
}
@@ -538,6 +565,7 @@ bool cmFindPackageCommand
e << "given CONFIGS option followed by invalid file name \""
<< args[i] << "\". The names given must be file names without "
<< "a path and with a \".cmake\" extension.";
+ this->SetError(e.str().c_str());
return false;
}
this->Configs.push_back(args[i]);
@@ -556,6 +584,29 @@ bool cmFindPackageCommand
}
}
+ // Maybe choose one mode exclusively.
+ this->UseFindModules = configArgs.empty();
+ this->UseConfigFiles = moduleArgs.empty();
+ if(!this->UseFindModules && !this->UseConfigFiles)
+ {
+ cmOStringStream e;
+ e << "given options exclusive to Module mode:\n";
+ for(std::set<unsigned int>::const_iterator si = moduleArgs.begin();
+ si != moduleArgs.end(); ++si)
+ {
+ e << " " << args[*si] << "\n";
+ }
+ e << "and options exclusive to Config mode:\n";
+ for(std::set<unsigned int>::const_iterator si = configArgs.begin();
+ si != configArgs.end(); ++si)
+ {
+ e << " " << args[*si] << "\n";
+ }
+ e << "The options are incompatible.";
+ this->SetError(e.str().c_str());
+ return false;
+ }
+
// Ignore EXACT with no version.
if(this->Version.empty() && this->VersionExact)
{
@@ -635,7 +686,7 @@ bool cmFindPackageCommand
this->SetModuleVariables(components);
// See if there is a Find<package>.cmake module.
- if(!this->NoModule)
+ if(this->UseFindModules)
{
bool foundModule = false;
if(!this->FindModule(foundModule))
@@ -650,6 +701,37 @@ bool cmFindPackageCommand
}
}
+ if(this->UseFindModules && this->UseConfigFiles &&
+ this->Makefile->IsOn("CMAKE_FIND_PACKAGE_WARN_NO_MODULE"))
+ {
+ cmOStringStream aw;
+ if(this->RequiredCMakeVersion >= CMake_VERSION_ENCODE(2,8,8))
+ {
+ aw << "find_package called without either MODULE or CONFIG option and "
+ "no Find" << this->Name << ".cmake module is in CMAKE_MODULE_PATH. "
+ "Add MODULE to exclusively request Module mode and fail if "
+ "Find" << this->Name << ".cmake is missing. "
+ "Add CONFIG to exclusively request Config mode and search for a "
+ "package configuration file provided by " << this->Name <<
+ " (" << this->Name << "Config.cmake or " <<
+ cmSystemTools::LowerCase(this->Name) << "-config.cmake). ";
+ }
+ else
+ {
+ aw << "find_package called without NO_MODULE option and no "
+ "Find" << this->Name << ".cmake module is in CMAKE_MODULE_PATH. "
+ "Add NO_MODULE to exclusively request Config mode and search for a "
+ "package configuration file provided by " << this->Name <<
+ " (" << this->Name << "Config.cmake or " <<
+ cmSystemTools::LowerCase(this->Name) << "-config.cmake). "
+ "Otherwise make Find" << this->Name << ".cmake available in "
+ "CMAKE_MODULE_PATH.";
+ }
+ aw << "\n"
+ "(Variable CMAKE_FIND_PACKAGE_WARN_NO_MODULE enabled this warning.)";
+ this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, aw.str());
+ }
+
// No find module. Assume the project has a CMake config file. Use
// a <package>_DIR cache variable to locate it.
this->Variable = this->Name;
@@ -830,41 +912,44 @@ bool cmFindPackageCommand::HandlePackageMode()
// Try to load the config file if the directory is known
bool fileFound = false;
- if(!cmSystemTools::IsOff(def))
+ if (this->UseConfigFiles)
{
- // Get the directory from the variable value.
- std::string dir = def;
- cmSystemTools::ConvertToUnixSlashes(dir);
-
- // Treat relative paths with respect to the current source dir.
- if(!cmSystemTools::FileIsFullPath(dir.c_str()))
+ if(!cmSystemTools::IsOff(def))
{
- dir = "/" + dir;
- dir = this->Makefile->GetCurrentDirectory() + dir;
+ // Get the directory from the variable value.
+ std::string dir = def;
+ cmSystemTools::ConvertToUnixSlashes(dir);
+
+ // Treat relative paths with respect to the current source dir.
+ if(!cmSystemTools::FileIsFullPath(dir.c_str()))
+ {
+ dir = "/" + dir;
+ dir = this->Makefile->GetCurrentDirectory() + dir;
+ }
+ // The file location was cached. Look for the correct file.
+ std::string file;
+ if (this->FindConfigFile(dir, file))
+ {
+ this->FileFound = file;
+ fileFound = true;
+ }
+ def = this->Makefile->GetDefinition(this->Variable.c_str());
}
- // The file location was cached. Look for the correct file.
- std::string file;
- if (this->FindConfigFile(dir, file))
+
+ // Search for the config file if it is not already found.
+ if(cmSystemTools::IsOff(def) || !fileFound)
{
- this->FileFound = file;
- fileFound = true;
+ fileFound = this->FindConfig();
+ def = this->Makefile->GetDefinition(this->Variable.c_str());
}
- def = this->Makefile->GetDefinition(this->Variable.c_str());
- }
- // Search for the config file if it is not already found.
- if(cmSystemTools::IsOff(def) || !fileFound)
- {
- fileFound = this->FindConfig();
- def = this->Makefile->GetDefinition(this->Variable.c_str());
- }
-
- // Sanity check.
- if(fileFound && this->FileFound.empty())
- {
- this->Makefile->IssueMessage(
- cmake::INTERNAL_ERROR, "fileFound is true but FileFound is empty!");
- fileFound = false;
+ // Sanity check.
+ if(fileFound && this->FileFound.empty())
+ {
+ this->Makefile->IssueMessage(
+ cmake::INTERNAL_ERROR, "fileFound is true but FileFound is empty!");
+ fileFound = false;
+ }
}
// If the directory for the config file was found, try to read the file.
@@ -892,6 +977,7 @@ bool cmFindPackageCommand::HandlePackageMode()
{
// The variable is not set.
cmOStringStream e;
+ cmOStringStream aw;
// If there are files in ConsideredConfigs, it means that FooConfig.cmake
// have been found, but they didn't have appropriate versions.
if (this->ConsideredConfigs.size() > 0)
@@ -911,41 +997,80 @@ bool cmFindPackageCommand::HandlePackageMode()
}
else
{
- e << "Could not find ";
- if(!this->NoModule)
- {
- e << "module Find" << this->Name << ".cmake or ";
- }
- e << "a configuration file for package " << this->Name << ".\n";
- if(!this->NoModule)
+ std::string requestedVersionString;
+ if(!this->Version.empty())
{
- e << "Adjust CMAKE_MODULE_PATH to find Find"
- << this->Name << ".cmake or set ";
+ requestedVersionString = " (requested version ";
+ requestedVersionString += this->Version;
+ requestedVersionString += ")";
}
- else
- {
- e << "Set ";
- }
- e << this->Variable << " to the directory containing a CMake "
- << "configuration file for " << this->Name << ". ";
- if(this->Configs.size() == 1)
- {
- e << "The file will be called " << this->Configs[0];
- }
- else
+
+ if (this->UseConfigFiles)
{
- e << "The file will have one of the following names:\n";
- for(std::vector<std::string>::const_iterator ci=this->Configs.begin();
- ci != this->Configs.end(); ++ci)
+ if(this->UseFindModules)
{
- e << " " << *ci << "\n";
+ e << "By not providing \"Find" << this->Name << ".cmake\" in "
+ "CMAKE_MODULE_PATH this project has asked CMake to find a "
+ "package configuration file provided by \""<<this->Name<< "\", "
+ "but CMake did not find one.\n";
}
+
+ if(this->Configs.size() == 1)
+ {
+ e << "Could not find a package configuration file named \""
+ << this->Configs[0] << "\" provided by package \""
+ << this->Name << "\"" << requestedVersionString <<".\n";
+ }
+ else
+ {
+ e << "Could not find a package configuration file provided by \""
+ << this->Name << "\"" << requestedVersionString
+ << " with any of the following names:\n";
+ for(std::vector<std::string>::const_iterator ci =
+ this->Configs.begin();
+ ci != this->Configs.end(); ++ci)
+ {
+ e << " " << *ci << "\n";
+ }
+ }
+
+ e << "Add the installation prefix of \"" << this->Name << "\" to "
+ "CMAKE_PREFIX_PATH or set \"" << this->Variable << "\" to a "
+ "directory containing one of the above files. "
+ "If \"" << this->Name << "\" provides a separate development "
+ "package or SDK, be sure it has been installed.";
+ }
+ else // if(!this->UseFindModules && !this->UseConfigFiles)
+ {
+ e << "No \"Find" << this->Name << ".cmake\" found in "
+ << "CMAKE_MODULE_PATH.";
+
+ aw<< "Find"<< this->Name <<".cmake must either be part of this "
+ "project itself, in this case adjust CMAKE_MODULE_PATH so that "
+ "it points to the correct location inside its source tree.\n"
+ "Or it must be installed by a package which has already been "
+ "found via find_package(). In this case make sure that "
+ "package has indeed been found and adjust CMAKE_MODULE_PATH to "
+ "contain the location where that package has installed "
+ "Find" << this->Name << ".cmake. This must be a location "
+ "provided by that package. This error in general means that "
+ "the buildsystem of this project is relying on a Find-module "
+ "without ensuring that it is actually available.\n";
}
}
this->Makefile->IssueMessage(
this->Required? cmake::FATAL_ERROR : cmake::WARNING, e.str());
+ if (this->Required)
+ {
+ cmSystemTools::SetFatalErrorOccured();
+ }
+
+ if (!aw.str().empty())
+ {
+ this->Makefile->IssueMessage(cmake::AUTHOR_WARNING,aw.str());
+ }
}
// Set a variable marking whether the package was found.
diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h
index e736352..edb70a6 100644
--- a/Source/cmFindPackageCommand.h
+++ b/Source/cmFindPackageCommand.h
@@ -44,17 +44,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "find_package";}
+ virtual const char* GetName() const { return "find_package";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Load settings for an external project.";
}
@@ -62,7 +62,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation();
+ virtual const char* GetFullDocumentation() const;
cmTypeMacro(cmFindPackageCommand, cmFindCommon);
protected:
@@ -130,10 +130,12 @@ private:
unsigned int VersionFoundPatch;
unsigned int VersionFoundTweak;
unsigned int VersionFoundCount;
+ unsigned int RequiredCMakeVersion;
bool Quiet;
bool Required;
bool Compatibility_1_6;
- bool NoModule;
+ bool UseConfigFiles;
+ bool UseFindModules;
bool NoUserRegistry;
bool NoSystemRegistry;
bool NoBuilds;
diff --git a/Source/cmFindPathCommand.h b/Source/cmFindPathCommand.h
index bd94779..a612990 100644
--- a/Source/cmFindPathCommand.h
+++ b/Source/cmFindPathCommand.h
@@ -44,17 +44,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "find_path";}
+ virtual const char* GetName() const {return "find_path";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Find the directory containing a file.";
}
diff --git a/Source/cmFindProgramCommand.cxx b/Source/cmFindProgramCommand.cxx
index 7c56ad7..00f5419 100644
--- a/Source/cmFindProgramCommand.cxx
+++ b/Source/cmFindProgramCommand.cxx
@@ -175,6 +175,8 @@ std::string cmFindProgramCommand::GetBundleExecutable(std::string bundlePath)
// And finally to a c++ string
executable = bundlePath + "/Contents/MacOS/" + std::string(buffer);
+ // Only release CFURLRef if it's not null
+ CFRelease( executableURL );
}
// Any CF objects returned from functions with "create" or
@@ -182,7 +184,6 @@ std::string cmFindProgramCommand::GetBundleExecutable(std::string bundlePath)
CFRelease( bundlePathCFS );
CFRelease( bundleURL );
CFRelease( appBundle );
- CFRelease( executableURL );
#endif
return executable;
diff --git a/Source/cmFindProgramCommand.h b/Source/cmFindProgramCommand.h
index 654e834..c1b14f9 100644
--- a/Source/cmFindProgramCommand.h
+++ b/Source/cmFindProgramCommand.h
@@ -43,17 +43,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "find_program";}
+ virtual const char* GetName() const { return "find_program";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Find an executable program.";
}
diff --git a/Source/cmForEachCommand.h b/Source/cmForEachCommand.h
index 026fd31..ae50005 100644
--- a/Source/cmForEachCommand.h
+++ b/Source/cmForEachCommand.h
@@ -16,11 +16,6 @@
#include "cmFunctionBlocker.h"
#include "cmListFileCache.h"
-/** \class cmForEachFunctionBlocker
- * \brief subclass of function blocker
- *
- *
- */
class cmForEachFunctionBlocker : public cmFunctionBlocker
{
public:
@@ -37,11 +32,7 @@ private:
int Depth;
};
-/** \class cmForEachCommand
- * \brief starts an if block
- *
- * cmForEachCommand starts an if block
- */
+/// Starts foreach() ... endforeach() block
class cmForEachCommand : public cmCommand
{
public:
@@ -63,17 +54,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "foreach";}
+ virtual const char* GetName() const { return "foreach";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Evaluate a group of commands for each value in a list.";
}
@@ -81,7 +72,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" foreach(loop_var arg1 arg2 ...)\n"
diff --git a/Source/cmFunctionBlocker.h b/Source/cmFunctionBlocker.h
index c3b29e1..9ee0b5c 100644
--- a/Source/cmFunctionBlocker.h
+++ b/Source/cmFunctionBlocker.h
@@ -17,11 +17,6 @@
#include "cmListFileCache.h"
class cmMakefile;
-/** \class cmFunctionBlocker
- * \brief A class that defines an interface for blocking cmake functions
- *
- * This is the superclass for any classes that need to block a cmake function
- */
class cmFunctionBlocker
{
public:
diff --git a/Source/cmFunctionCommand.cxx b/Source/cmFunctionCommand.cxx
index 7a80a1c..ce36145 100644
--- a/Source/cmFunctionCommand.cxx
+++ b/Source/cmFunctionCommand.cxx
@@ -28,7 +28,7 @@ public:
* cmMacroHelperCommand and cmFunctionHelperCommand
* which cannot provide appropriate documentation.
*/
- virtual bool ShouldAppearInDocumentation()
+ virtual bool ShouldAppearInDocumentation() const
{
return false;
}
@@ -49,7 +49,7 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* This is called when the command is first encountered in
@@ -64,12 +64,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return this->Args[0].c_str(); }
+ virtual const char* GetName() const { return this->Args[0].c_str(); }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
std::string docs = "Function named: ";
docs += this->GetName();
@@ -79,7 +79,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return this->GetTerseDocumentation();
}
diff --git a/Source/cmFunctionCommand.h b/Source/cmFunctionCommand.h
index a169244..43c8e29 100644
--- a/Source/cmFunctionCommand.h
+++ b/Source/cmFunctionCommand.h
@@ -15,11 +15,6 @@
#include "cmCommand.h"
#include "cmFunctionBlocker.h"
-/** \class cmFunctionFunctionBlocker
- * \brief subclass of function blocker
- *
- *
- */
class cmFunctionFunctionBlocker : public cmFunctionBlocker
{
public:
@@ -35,11 +30,7 @@ public:
int Depth;
};
-/** \class cmFunctionCommand
- * \brief starts an if block
- *
- * cmFunctionCommand starts an if block
- */
+/// Starts function() ... endfunction() block
class cmFunctionCommand : public cmCommand
{
public:
@@ -61,17 +52,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "function";}
+ virtual const char* GetName() const { return "function";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Start recording a function for later invocation as a command.";
}
@@ -79,7 +70,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" function(<name> [arg1 [arg2 [arg3 ...]]])\n"
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
new file mode 100644
index 0000000..369eb5c
--- /dev/null
+++ b/Source/cmGeneratorTarget.cxx
@@ -0,0 +1,95 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2012 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.
+============================================================================*/
+#include "cmGeneratorTarget.h"
+
+#include "cmTarget.h"
+#include "cmMakefile.h"
+#include "cmLocalGenerator.h"
+#include "cmGlobalGenerator.h"
+#include "cmSourceFile.h"
+
+//----------------------------------------------------------------------------
+cmGeneratorTarget::cmGeneratorTarget(cmTarget* t): Target(t)
+{
+ this->Makefile = this->Target->GetMakefile();
+ this->LocalGenerator = this->Makefile->GetLocalGenerator();
+ this->GlobalGenerator = this->LocalGenerator->GetGlobalGenerator();
+ this->ClassifySources();
+}
+
+//----------------------------------------------------------------------------
+void cmGeneratorTarget::ClassifySources()
+{
+ bool isObjLib = this->Target->GetType() == cmTarget::OBJECT_LIBRARY;
+ std::vector<cmSourceFile*> badObjLib;
+ std::vector<cmSourceFile*> const& sources = this->Target->GetSourceFiles();
+ for(std::vector<cmSourceFile*>::const_iterator si = sources.begin();
+ si != sources.end(); ++si)
+ {
+ cmSourceFile* sf = *si;
+ cmTarget::SourceFileFlags tsFlags =
+ this->Target->GetTargetSourceFileFlags(sf);
+ if(sf->GetCustomCommand())
+ {
+ this->CustomCommands.push_back(sf);
+ }
+ else if(tsFlags.Type != cmTarget::SourceFileTypeNormal)
+ {
+ this->OSXContent.push_back(sf);
+ if(isObjLib) { badObjLib.push_back(sf); }
+ }
+ else if(sf->GetPropertyAsBool("HEADER_FILE_ONLY"))
+ {
+ this->HeaderSources.push_back(sf);
+ }
+ else if(sf->GetPropertyAsBool("EXTERNAL_OBJECT"))
+ {
+ this->ExternalObjects.push_back(sf);
+ if(isObjLib) { badObjLib.push_back(sf); }
+ }
+ else if(cmSystemTools::LowerCase(sf->GetExtension()) == "def")
+ {
+ this->ModuleDefinitionFile = sf->GetFullPath();
+ if(isObjLib) { badObjLib.push_back(sf); }
+ }
+ else if(this->GlobalGenerator->IgnoreFile(sf->GetExtension().c_str()))
+ {
+ // We only get here if a source file is not an external object
+ // and has an extension that is listed as an ignored file type.
+ // No message or diagnosis should be given.
+ }
+ else if(sf->GetLanguage())
+ {
+ this->ObjectSources.push_back(sf);
+ }
+ else
+ {
+ this->ExtraSources.push_back(sf);
+ if(isObjLib) { badObjLib.push_back(sf); }
+ }
+ }
+
+ if(!badObjLib.empty())
+ {
+ cmOStringStream e;
+ e << "OBJECT library \"" << this->Target->GetName() << "\" contains:\n";
+ for(std::vector<cmSourceFile*>::iterator i = badObjLib.begin();
+ i != badObjLib.end(); ++i)
+ {
+ e << " " << (*i)->GetLocation().GetName() << "\n";
+ }
+ e << "but may contain only headers and sources that compile.";
+ this->GlobalGenerator->GetCMakeInstance()
+ ->IssueMessage(cmake::FATAL_ERROR, e.str(),
+ this->Target->GetBacktrace());
+ }
+}
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
new file mode 100644
index 0000000..b083ba1
--- /dev/null
+++ b/Source/cmGeneratorTarget.h
@@ -0,0 +1,58 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2012 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.
+============================================================================*/
+#ifndef cmGeneratorTarget_h
+#define cmGeneratorTarget_h
+
+#include "cmStandardIncludes.h"
+
+class cmCustomCommand;
+class cmGlobalGenerator;
+class cmLocalGenerator;
+class cmMakefile;
+class cmSourceFile;
+class cmTarget;
+
+class cmGeneratorTarget
+{
+public:
+ cmGeneratorTarget(cmTarget*);
+
+ cmTarget* Target;
+ cmMakefile* Makefile;
+ cmLocalGenerator* LocalGenerator;
+ cmGlobalGenerator* GlobalGenerator;
+
+ /** Sources classified by purpose. */
+ std::vector<cmSourceFile*> CustomCommands;
+ std::vector<cmSourceFile*> ExtraSources;
+ std::vector<cmSourceFile*> HeaderSources;
+ std::vector<cmSourceFile*> ObjectSources;
+ std::vector<cmSourceFile*> ExternalObjects;
+ std::vector<cmSourceFile*> OSXContent;
+ std::string ModuleDefinitionFile;
+
+ std::map<cmSourceFile const*, std::string> Objects;
+ std::set<cmSourceFile const*> ExplicitObjectName;
+
+ /** Full path with trailing slash to the top-level directory
+ holding object files for this target. Includes the build
+ time config name placeholder if needed for the generator. */
+ std::string ObjectDirectory;
+
+private:
+ void ClassifySources();
+
+ cmGeneratorTarget(cmGeneratorTarget const&);
+ void operator=(cmGeneratorTarget const&);
+};
+
+#endif
diff --git a/Source/cmGetCMakePropertyCommand.h b/Source/cmGetCMakePropertyCommand.h
index d82be70..0a5917c 100644
--- a/Source/cmGetCMakePropertyCommand.h
+++ b/Source/cmGetCMakePropertyCommand.h
@@ -32,17 +32,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "get_cmake_property";}
+ virtual const char* GetName() const { return "get_cmake_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get a property of the CMake instance.";
}
@@ -50,7 +50,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" get_cmake_property(VAR property)\n"
diff --git a/Source/cmGetDirectoryPropertyCommand.h b/Source/cmGetDirectoryPropertyCommand.h
index b7a5f71..901b90c 100644
--- a/Source/cmGetDirectoryPropertyCommand.h
+++ b/Source/cmGetDirectoryPropertyCommand.h
@@ -32,17 +32,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "get_directory_property";}
+ virtual const char* GetName() const { return "get_directory_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get a property of DIRECTORY scope.";
}
@@ -50,7 +50,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)\n"
diff --git a/Source/cmGetFilenameComponentCommand.h b/Source/cmGetFilenameComponentCommand.h
index aff4d7e..0c8e57a 100644
--- a/Source/cmGetFilenameComponentCommand.h
+++ b/Source/cmGetFilenameComponentCommand.h
@@ -41,17 +41,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "get_filename_component";}
+ virtual const char* GetName() const { return "get_filename_component";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get a specific component of a full filename.";
}
@@ -59,7 +59,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" get_filename_component(<VAR> FileName\n"
diff --git a/Source/cmGetPropertyCommand.h b/Source/cmGetPropertyCommand.h
index d318b19..dca2627 100644
--- a/Source/cmGetPropertyCommand.h
+++ b/Source/cmGetPropertyCommand.h
@@ -34,17 +34,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "get_property";}
+ virtual const char* GetName() const { return "get_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get a property.";
}
@@ -52,7 +52,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" get_property(<variable>\n"
diff --git a/Source/cmGetSourceFilePropertyCommand.h b/Source/cmGetSourceFilePropertyCommand.h
index 56469f8..6d52503 100644
--- a/Source/cmGetSourceFilePropertyCommand.h
+++ b/Source/cmGetSourceFilePropertyCommand.h
@@ -32,12 +32,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "get_source_file_property";}
+ virtual const char* GetName() const { return "get_source_file_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get a property for a source file.";
}
@@ -45,7 +45,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" get_source_file_property(VAR file property)\n"
diff --git a/Source/cmGetTargetPropertyCommand.h b/Source/cmGetTargetPropertyCommand.h
index 71c75ef..b60abea 100644
--- a/Source/cmGetTargetPropertyCommand.h
+++ b/Source/cmGetTargetPropertyCommand.h
@@ -32,12 +32,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "get_target_property";}
+ virtual const char* GetName() const { return "get_target_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get a property from a target.";
}
@@ -45,7 +45,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" get_target_property(VAR target property)\n"
diff --git a/Source/cmGetTestPropertyCommand.h b/Source/cmGetTestPropertyCommand.h
index d9f5d9b..af6bafa 100644
--- a/Source/cmGetTestPropertyCommand.h
+++ b/Source/cmGetTestPropertyCommand.h
@@ -32,12 +32,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "get_test_property";}
+ virtual const char* GetName() const { return "get_test_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Get a property of the test.";
}
@@ -45,7 +45,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" get_test_property(test property VAR)\n"
diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx
index a988844..545f9e8 100644
--- a/Source/cmGlobalGenerator.cxx
+++ b/Source/cmGlobalGenerator.cxx
@@ -24,6 +24,7 @@
#include "cmExportInstallFileGenerator.h"
#include "cmComputeTargetDepends.h"
#include "cmGeneratedFileStream.h"
+#include "cmGeneratorTarget.h"
#include <cmsys/Directory.hxx>
@@ -74,6 +75,7 @@ cmGlobalGenerator::~cmGlobalGenerator()
delete this->ExtraGenerator;
}
+ this->ClearGeneratorTargets();
this->ClearExportSets();
}
@@ -807,6 +809,7 @@ bool cmGlobalGenerator::IsDependedOn(const char* project,
void cmGlobalGenerator::Configure()
{
this->FirstTimeProgress = 0.0f;
+ this->ClearGeneratorTargets();
this->ClearExportSets();
// Delete any existing cmLocalGenerators
unsigned int i;
@@ -947,6 +950,9 @@ void cmGlobalGenerator::Generate()
this->LocalGenerators[i]->GenerateTargetManifest();
}
+ // Create per-target generator information.
+ this->CreateGeneratorTargets();
+
// Compute the inter-target dependencies.
if(!this->ComputeTargetDepends())
{
@@ -1056,6 +1062,55 @@ void cmGlobalGenerator::CreateAutomocTargets()
#endif
}
+//----------------------------------------------------------------------------
+void cmGlobalGenerator::CreateGeneratorTargets()
+{
+ // Construct per-target generator information.
+ for(unsigned int i=0; i < this->LocalGenerators.size(); ++i)
+ {
+ cmTargets& targets =
+ this->LocalGenerators[i]->GetMakefile()->GetTargets();
+ for(cmTargets::iterator ti = targets.begin();
+ ti != targets.end(); ++ti)
+ {
+ cmTarget* t = &ti->second;
+ cmGeneratorTarget* gt = new cmGeneratorTarget(t);
+ this->GeneratorTargets[t] = gt;
+ this->ComputeTargetObjects(gt);
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
+void cmGlobalGenerator::ClearGeneratorTargets()
+{
+ for(GeneratorTargetsType::iterator i = this->GeneratorTargets.begin();
+ i != this->GeneratorTargets.end(); ++i)
+ {
+ delete i->second;
+ }
+ this->GeneratorTargets.clear();
+}
+
+//----------------------------------------------------------------------------
+cmGeneratorTarget* cmGlobalGenerator::GetGeneratorTarget(cmTarget* t) const
+{
+ GeneratorTargetsType::const_iterator ti = this->GeneratorTargets.find(t);
+ if(ti == this->GeneratorTargets.end())
+ {
+ this->CMakeInstance->IssueMessage(
+ cmake::INTERNAL_ERROR, "Missing cmGeneratorTarget instance!",
+ cmListFileBacktrace());
+ return 0;
+ }
+ return ti->second;
+}
+
+//----------------------------------------------------------------------------
+void cmGlobalGenerator::ComputeTargetObjects(cmGeneratorTarget*) const
+{
+ // Implemented in generator subclasses that need this.
+}
void cmGlobalGenerator::CheckLocalGenerators()
{
@@ -1714,7 +1769,7 @@ void cmGlobalGenerator::SetCMakeInstance(cmake* cm)
void cmGlobalGenerator::CreateDefaultGlobalTargets(cmTargets* targets)
{
cmMakefile* mf = this->LocalGenerators[0]->GetMakefile();
- const char* cmakeCfgIntDir = this->GetCMakeCFGInitDirectory();
+ const char* cmakeCfgIntDir = this->GetCMakeCFGIntDir();
const char* cmakeCommand = mf->GetRequiredDefinition("CMAKE_COMMAND");
// CPack
diff --git a/Source/cmGlobalGenerator.h b/Source/cmGlobalGenerator.h
index 1a0e41a..80b948b 100644
--- a/Source/cmGlobalGenerator.h
+++ b/Source/cmGlobalGenerator.h
@@ -19,6 +19,7 @@
#include "cmTargetDepend.h" // For cmTargetDependSet
#include "cmSystemTools.h" // for cmSystemTools::OutputOption
class cmake;
+class cmGeneratorTarget;
class cmMakefile;
class cmLocalGenerator;
class cmExternalMakefileProjectGenerator;
@@ -183,7 +184,7 @@ public:
const char* GetLanguageOutputExtension(cmSourceFile const&);
///! What is the configurations directory variable called?
- virtual const char* GetCMakeCFGInitDirectory() { return "."; }
+ virtual const char* GetCMakeCFGIntDir() const { return "."; }
/** Get whether the generator should use a script for link commands. */
bool GetUseLinkScript() const { return this->UseLinkScript; }
@@ -251,6 +252,9 @@ public:
// via a target_link_libraries or add_dependencies
TargetDependSet const& GetTargetDirectDepends(cmTarget & target);
+ /** Get per-target generator information. */
+ cmGeneratorTarget* GetGeneratorTarget(cmTarget*) const;
+
const std::map<cmStdString, std::vector<cmLocalGenerator*> >& GetProjectMap()
const {return this->ProjectMap;}
@@ -370,6 +374,13 @@ private:
typedef std::map<cmTarget *, TargetDependSet> TargetDependMap;
TargetDependMap TargetDependencies;
+ // Per-target generator information.
+ typedef std::map<cmTarget*, cmGeneratorTarget*> GeneratorTargetsType;
+ GeneratorTargetsType GeneratorTargets;
+ void CreateGeneratorTargets();
+ void ClearGeneratorTargets();
+ virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
+
// Cache directory content and target files to be built.
struct DirectoryContent: public std::set<cmStdString>
{
diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx
index a23c0d8..e63de9c 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.cxx
+++ b/Source/cmGlobalUnixMakefileGenerator3.cxx
@@ -17,6 +17,7 @@
#include "cmGeneratedFileStream.h"
#include "cmSourceFile.h"
#include "cmTarget.h"
+#include "cmGeneratorTarget.h"
cmGlobalUnixMakefileGenerator3::cmGlobalUnixMakefileGenerator3()
{
@@ -71,6 +72,38 @@ void cmGlobalUnixMakefileGenerator3
}
//----------------------------------------------------------------------------
+void
+cmGlobalUnixMakefileGenerator3
+::ComputeTargetObjects(cmGeneratorTarget* gt) const
+{
+ cmTarget* target = gt->Target;
+ cmLocalUnixMakefileGenerator3* lg =
+ static_cast<cmLocalUnixMakefileGenerator3*>(gt->LocalGenerator);
+
+ // Compute full path to object file directory for this target.
+ std::string dir_max;
+ dir_max += gt->Makefile->GetCurrentOutputDirectory();
+ dir_max += "/";
+ dir_max += gt->LocalGenerator->GetTargetDirectory(*target);
+ dir_max += "/";
+ gt->ObjectDirectory = dir_max;
+
+ // Compute the name of each object file.
+ for(std::vector<cmSourceFile*>::iterator
+ si = gt->ObjectSources.begin();
+ si != gt->ObjectSources.end(); ++si)
+ {
+ cmSourceFile* sf = *si;
+ bool hasSourceExtension = true;
+ std::string objectName = gt->LocalGenerator
+ ->GetObjectFileNameWithoutTarget(*sf, dir_max,
+ &hasSourceExtension);
+ gt->Objects[sf] = objectName;
+ lg->AddLocalObjectFile(target, sf, objectName, hasSourceExtension);
+ }
+}
+
+//----------------------------------------------------------------------------
std::string EscapeJSON(const std::string& s) {
std::string result;
for (std::string::size_type i = 0; i < s.size(); ++i) {
@@ -378,6 +411,7 @@ void cmGlobalUnixMakefileGenerator3
(l->second.GetType() == cmTarget::STATIC_LIBRARY) ||
(l->second.GetType() == cmTarget::SHARED_LIBRARY) ||
(l->second.GetType() == cmTarget::MODULE_LIBRARY) ||
+ (l->second.GetType() == cmTarget::OBJECT_LIBRARY) ||
(l->second.GetType() == cmTarget::UTILITY))
{
std::string tname = lg->GetRelativeTargetDirectory(l->second);
@@ -413,6 +447,7 @@ cmGlobalUnixMakefileGenerator3
(l->second.GetType() == cmTarget::STATIC_LIBRARY) ||
(l->second.GetType() == cmTarget::SHARED_LIBRARY) ||
(l->second.GetType() == cmTarget::MODULE_LIBRARY) ||
+ (l->second.GetType() == cmTarget::OBJECT_LIBRARY) ||
(l->second.GetType() == cmTarget::UTILITY))
{
// Add this to the list of depends rules in this directory.
@@ -587,6 +622,7 @@ cmGlobalUnixMakefileGenerator3
(t->second.GetType() == cmTarget::STATIC_LIBRARY) ||
(t->second.GetType() == cmTarget::SHARED_LIBRARY) ||
(t->second.GetType() == cmTarget::MODULE_LIBRARY) ||
+ (t->second.GetType() == cmTarget::OBJECT_LIBRARY) ||
(t->second.GetType() == cmTarget::UTILITY)))
{
// Add a rule to build the target by name.
@@ -673,6 +709,7 @@ cmGlobalUnixMakefileGenerator3
|| (t->second.GetType() == cmTarget::STATIC_LIBRARY)
|| (t->second.GetType() == cmTarget::SHARED_LIBRARY)
|| (t->second.GetType() == cmTarget::MODULE_LIBRARY)
+ || (t->second.GetType() == cmTarget::OBJECT_LIBRARY)
|| (t->second.GetType() == cmTarget::UTILITY)))
{
std::string makefileName;
@@ -982,6 +1019,7 @@ void cmGlobalUnixMakefileGenerator3::WriteHelpRule
(t->second.GetType() == cmTarget::STATIC_LIBRARY) ||
(t->second.GetType() == cmTarget::SHARED_LIBRARY) ||
(t->second.GetType() == cmTarget::MODULE_LIBRARY) ||
+ (t->second.GetType() == cmTarget::OBJECT_LIBRARY) ||
(t->second.GetType() == cmTarget::GLOBAL_TARGET) ||
(t->second.GetType() == cmTarget::UTILITY))
{
diff --git a/Source/cmGlobalUnixMakefileGenerator3.h b/Source/cmGlobalUnixMakefileGenerator3.h
index 9663b55..e6dd09d 100644
--- a/Source/cmGlobalUnixMakefileGenerator3.h
+++ b/Source/cmGlobalUnixMakefileGenerator3.h
@@ -182,6 +182,8 @@ protected:
size_t CountProgressMarksInAll(cmLocalUnixMakefileGenerator3* lg);
cmGeneratedFileStream *CommandDatabase;
+private:
+ virtual void ComputeTargetObjects(cmGeneratorTarget* gt) const;
};
#endif
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index 18b483d..750b89c 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -72,7 +72,7 @@ public:
* Studio?
*/
virtual std::string GetUserMacrosRegKeyBase();
- virtual const char* GetCMakeCFGInitDirectory()
+ virtual const char* GetCMakeCFGIntDir() const
{ return "$(Configuration)";}
bool Find64BitTools(cmMakefile* mf);
protected:
diff --git a/Source/cmGlobalVisualStudio6Generator.h b/Source/cmGlobalVisualStudio6Generator.h
index 77d5370..da08a12 100644
--- a/Source/cmGlobalVisualStudio6Generator.h
+++ b/Source/cmGlobalVisualStudio6Generator.h
@@ -82,7 +82,7 @@ public:
std::string& dir);
///! What is the configurations directory variable called?
- virtual const char* GetCMakeCFGInitDirectory() { return "$(IntDir)"; }
+ virtual const char* GetCMakeCFGIntDir() const { return "$(IntDir)"; }
protected:
virtual const char* GetIDEVersion() { return "6.0"; }
diff --git a/Source/cmGlobalVisualStudio7Generator.h b/Source/cmGlobalVisualStudio7Generator.h
index adfb757..c92998e 100644
--- a/Source/cmGlobalVisualStudio7Generator.h
+++ b/Source/cmGlobalVisualStudio7Generator.h
@@ -87,7 +87,7 @@ public:
std::string& dir);
///! What is the configurations directory variable called?
- virtual const char* GetCMakeCFGInitDirectory() { return "$(OutDir)"; }
+ virtual const char* GetCMakeCFGIntDir() const { return "$(OutDir)"; }
/** Return true if the target project file should have the option
LinkLibraryDependencies and link to .sln dependencies. */
diff --git a/Source/cmGlobalVisualStudioGenerator.cxx b/Source/cmGlobalVisualStudioGenerator.cxx
index 449d090..7da4f86 100644
--- a/Source/cmGlobalVisualStudioGenerator.cxx
+++ b/Source/cmGlobalVisualStudioGenerator.cxx
@@ -12,8 +12,10 @@
#include "cmGlobalVisualStudioGenerator.h"
#include "cmCallVisualStudioMacro.h"
-#include "cmLocalGenerator.h"
+#include "cmGeneratorTarget.h"
+#include "cmLocalVisualStudioGenerator.h"
#include "cmMakefile.h"
+#include "cmSourceFile.h"
#include "cmTarget.h"
//----------------------------------------------------------------------------
@@ -98,6 +100,64 @@ void cmGlobalVisualStudioGenerator::Generate()
}
//----------------------------------------------------------------------------
+void
+cmGlobalVisualStudioGenerator
+::ComputeTargetObjects(cmGeneratorTarget* gt) const
+{
+ cmLocalVisualStudioGenerator* lg =
+ static_cast<cmLocalVisualStudioGenerator*>(gt->LocalGenerator);
+ std::string dir_max = lg->ComputeLongestObjectDirectory(*gt->Target);
+
+ // Count the number of object files with each name. Note that
+ // windows file names are not case sensitive.
+ std::map<cmStdString, int> counts;
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = gt->ObjectSources.begin();
+ si != gt->ObjectSources.end(); ++si)
+ {
+ cmSourceFile* sf = *si;
+ std::string objectNameLower = cmSystemTools::LowerCase(
+ cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath()));
+ objectNameLower += ".obj";
+ counts[objectNameLower] += 1;
+ }
+
+ // For all source files producing duplicate names we need unique
+ // object name computation.
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = gt->ObjectSources.begin();
+ si != gt->ObjectSources.end(); ++si)
+ {
+ cmSourceFile* sf = *si;
+ std::string objectName =
+ cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath());
+ objectName += ".obj";
+ if(counts[cmSystemTools::LowerCase(objectName)] > 1)
+ {
+ gt->ExplicitObjectName.insert(sf);
+ objectName = lg->GetObjectFileNameWithoutTarget(*sf, dir_max);
+ }
+ gt->Objects[sf] = objectName;
+ }
+
+ std::string dir = gt->Makefile->GetCurrentOutputDirectory();
+ dir += "/";
+ std::string tgtDir = lg->GetTargetDirectory(*gt->Target);
+ if(!tgtDir.empty())
+ {
+ dir += tgtDir;
+ dir += "/";
+ }
+ const char* cd = this->GetCMakeCFGIntDir();
+ if(cd && *cd)
+ {
+ dir += cd;
+ dir += "/";
+ }
+ gt->ObjectDirectory = dir;
+}
+
+//----------------------------------------------------------------------------
bool IsVisualStudioMacrosFileRegistered(const std::string& macrosFile,
const std::string& regKeyBase,
std::string& nextAvailableSubKeyName);
@@ -315,6 +375,12 @@ bool cmGlobalVisualStudioGenerator::ComputeTargetDepends()
}
//----------------------------------------------------------------------------
+static bool VSLinkable(cmTarget* t)
+{
+ return t->IsLinkable() || t->GetType() == cmTarget::OBJECT_LIBRARY;
+}
+
+//----------------------------------------------------------------------------
void cmGlobalVisualStudioGenerator::ComputeVSTargetDepends(cmTarget& target)
{
if(this->VSTargetDepends.find(&target) != this->VSTargetDepends.end())
@@ -398,7 +464,7 @@ void cmGlobalVisualStudioGenerator::ComputeVSTargetDepends(cmTarget& target)
di != utilDepends.end(); ++di)
{
cmTarget* dep = *di;
- if(allowLinkable || !dep->IsLinkable() || linked.count(dep))
+ if(allowLinkable || !VSLinkable(dep) || linked.count(dep))
{
// Direct dependency allowed.
vsTargetDepend.insert(dep->GetName());
diff --git a/Source/cmGlobalVisualStudioGenerator.h b/Source/cmGlobalVisualStudioGenerator.h
index bc96f4e..b62ba22 100644
--- a/Source/cmGlobalVisualStudioGenerator.h
+++ b/Source/cmGlobalVisualStudioGenerator.h
@@ -97,6 +97,8 @@ protected:
typedef std::map<cmTarget*, cmStdString> UtilityDependsMap;
UtilityDependsMap UtilityDepends;
private:
+ void ComputeTargetObjects(cmGeneratorTarget* gt) const;
+
void FollowLinkDepends(cmTarget* target, std::set<cmTarget*>& linked);
class TargetSetMap: public std::map<cmTarget*, TargetSet> {};
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index cb74746..a6a9200 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -179,8 +179,6 @@ void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const&
mf->AddDefinition("CMAKE_GENERATOR_CC", "gcc");
mf->AddDefinition("CMAKE_GENERATOR_CXX", "g++");
mf->AddDefinition("CMAKE_GENERATOR_NO_COMPILER_ENV", "1");
- // initialize Architectures so it can be used by
- // GetTargetObjectFileDirectories
this->cmGlobalGenerator::EnableLanguage(lang, mf, optional);
const char* osxArch =
mf->GetDefinition("CMAKE_OSX_ARCHITECTURES");
@@ -3285,7 +3283,7 @@ cmGlobalXCodeGenerator::WriteXCodePBXProj(std::ostream& fout,
}
//----------------------------------------------------------------------------
-const char* cmGlobalXCodeGenerator::GetCMakeCFGInitDirectory()
+const char* cmGlobalXCodeGenerator::GetCMakeCFGIntDir() const
{
return this->XcodeVersion >= 21 ?
"$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)" : ".";
@@ -3363,37 +3361,6 @@ std::string cmGlobalXCodeGenerator::XCodeEscapePath(const char* p)
}
//----------------------------------------------------------------------------
-void cmGlobalXCodeGenerator::
-GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs)
-{
- std::string dir = this->CurrentMakefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->CurrentMakefile->GetProjectName();
- dir += ".build/";
- dir += this->GetCMakeCFGInitDirectory();
- dir += "/";
- dir += target->GetName();
- dir += ".build/Objects-normal/";
- std::string dirsave = dir;
- if(this->Architectures.size())
- {
- for(std::vector<std::string>::iterator i = this->Architectures.begin();
- i != this->Architectures.end(); ++i)
- {
- dir += *i;
- dirs.push_back(dir);
- dir = dirsave;
- }
- }
- else
- {
- dirs.push_back(dir);
- }
-}
-
-//----------------------------------------------------------------------------
void
cmGlobalXCodeGenerator
::AppendDirectoryForConfig(const char* prefix,
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index ed54be3..b9cf775 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -74,11 +74,8 @@ public:
std::string& dir);
///! What is the configurations directory variable called?
- virtual const char* GetCMakeCFGInitDirectory();
+ virtual const char* GetCMakeCFGIntDir() const;
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
void SetCurrentLocalGenerator(cmLocalGenerator*);
/** Return true if the generated build tree may contain multiple builds.
diff --git a/Source/cmIfCommand.h b/Source/cmIfCommand.h
index 4996bc4..83ea8a4 100644
--- a/Source/cmIfCommand.h
+++ b/Source/cmIfCommand.h
@@ -15,11 +15,6 @@
#include "cmCommand.h"
#include "cmFunctionBlocker.h"
-/** \class cmIfFunctionBlocker
- * \brief subclass of function blocker
- *
- *
- */
class cmIfFunctionBlocker : public cmFunctionBlocker
{
public:
@@ -39,11 +34,7 @@ public:
unsigned int ScopeDepth;
};
-/** \class cmIfCommand
- * \brief starts an if block
- *
- * cmIfCommand starts an if block
- */
+/// Starts an if block
class cmIfCommand : public cmCommand
{
public:
@@ -72,12 +63,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "if";}
+ virtual const char* GetName() const { return "if";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Conditionally execute a group of commands.";
}
@@ -85,12 +76,12 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" if(expression)\n"
diff --git a/Source/cmIncludeCommand.h b/Source/cmIncludeCommand.h
index d933ef3..c46c02d 100644
--- a/Source/cmIncludeCommand.h
+++ b/Source/cmIncludeCommand.h
@@ -43,17 +43,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "include";}
+ virtual const char* GetName() const {return "include";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Read CMake listfile code from the given file.";
}
@@ -61,7 +61,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" include(<file|module> [OPTIONAL] [RESULT_VARIABLE <VAR>]\n"
diff --git a/Source/cmIncludeDirectoryCommand.h b/Source/cmIncludeDirectoryCommand.h
index cbe344f..dcc116a 100644
--- a/Source/cmIncludeDirectoryCommand.h
+++ b/Source/cmIncludeDirectoryCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "include_directories";}
+ virtual const char* GetName() const { return "include_directories";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Add include directories to the build.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 ...)\n"
diff --git a/Source/cmIncludeExternalMSProjectCommand.h b/Source/cmIncludeExternalMSProjectCommand.h
index 5269041..911a772 100644
--- a/Source/cmIncludeExternalMSProjectCommand.h
+++ b/Source/cmIncludeExternalMSProjectCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "include_external_msproject";}
+ virtual const char* GetName() const {return "include_external_msproject";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Include an external Microsoft project file in a workspace.";
}
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" include_external_msproject(projectname location\n"
diff --git a/Source/cmIncludeRegularExpressionCommand.h b/Source/cmIncludeRegularExpressionCommand.h
index 6ddbbed..7c633c0 100644
--- a/Source/cmIncludeRegularExpressionCommand.h
+++ b/Source/cmIncludeRegularExpressionCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "include_regular_expression";}
+ virtual const char* GetName() const {return "include_regular_expression";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set the regular expression used for dependency checking.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" include_regular_expression(regex_match [regex_complain])\n"
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index dca528d..c656487 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -357,7 +357,8 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
if(target->GetType() != cmTarget::EXECUTABLE &&
target->GetType() != cmTarget::STATIC_LIBRARY &&
target->GetType() != cmTarget::SHARED_LIBRARY &&
- target->GetType() != cmTarget::MODULE_LIBRARY)
+ target->GetType() != cmTarget::MODULE_LIBRARY &&
+ target->GetType() != cmTarget::OBJECT_LIBRARY)
{
cmOStringStream e;
e << "TARGETS given target \"" << (*targetIt)
@@ -365,6 +366,14 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
this->SetError(e.str().c_str());
return false;
}
+ else if(target->GetType() == cmTarget::OBJECT_LIBRARY)
+ {
+ cmOStringStream e;
+ e << "TARGETS given OBJECT library \"" << (*targetIt)
+ << "\" which may not be installed.";
+ this->SetError(e.str().c_str());
+ return false;
+ }
// Store the target in the list to be installed.
targets.push_back(target);
}
diff --git a/Source/cmInstallCommand.h b/Source/cmInstallCommand.h
index 377b43a..3403c38 100644
--- a/Source/cmInstallCommand.h
+++ b/Source/cmInstallCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "install";}
+ virtual const char* GetName() const { return "install";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Specify rules to run at install time.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"This command generates installation rules for a project. "
diff --git a/Source/cmInstallDirectoryGenerator.cxx b/Source/cmInstallDirectoryGenerator.cxx
index ab32f94..ddf7d08 100644
--- a/Source/cmInstallDirectoryGenerator.cxx
+++ b/Source/cmInstallDirectoryGenerator.cxx
@@ -42,7 +42,7 @@ cmInstallDirectoryGenerator::GenerateScriptActions(std::ostream& os,
{
// Write code to install the directories.
const char* no_rename = 0;
- this->AddInstallRule(os, cmTarget::INSTALL_DIRECTORY,
+ this->AddInstallRule(os, cmInstallType_DIRECTORY,
this->Directories,
this->Optional,
this->FilePermissions.c_str(),
diff --git a/Source/cmInstallExportGenerator.cxx b/Source/cmInstallExportGenerator.cxx
index 69e3f2c..28a19d7 100644
--- a/Source/cmInstallExportGenerator.cxx
+++ b/Source/cmInstallExportGenerator.cxx
@@ -16,7 +16,6 @@
#include "cmake.h"
#include "cmInstallTargetGenerator.h"
#include "cmGeneratedFileStream.h"
-#include "cmTarget.h"
#include "cmMakefile.h"
#include "cmLocalGenerator.h"
#include "cmGlobalGenerator.h"
@@ -186,7 +185,7 @@ cmInstallExportGenerator::GenerateScriptConfigs(std::ostream& os,
files.push_back(i->second);
std::string config_test = this->CreateConfigTest(i->first.c_str());
os << indent << "IF(" << config_test << ")\n";
- this->AddInstallRule(os, cmTarget::INSTALL_FILES, files, false,
+ this->AddInstallRule(os, cmInstallType_FILES, files, false,
this->FilePermissions.c_str(), 0, 0, 0,
indent.Next());
os << indent << "ENDIF(" << config_test << ")\n";
@@ -225,6 +224,6 @@ void cmInstallExportGenerator::GenerateScriptActions(std::ostream& os,
// Install the main export file.
std::vector<std::string> files;
files.push_back(this->MainImportFile);
- this->AddInstallRule(os, cmTarget::INSTALL_FILES, files, false,
+ this->AddInstallRule(os, cmInstallType_FILES, files, false,
this->FilePermissions.c_str(), 0, 0, 0, indent);
}
diff --git a/Source/cmInstallFilesCommand.h b/Source/cmInstallFilesCommand.h
index da43920..d3c7ed6 100644
--- a/Source/cmInstallFilesCommand.h
+++ b/Source/cmInstallFilesCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "install_files";}
+ virtual const char* GetName() const { return "install_files";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the install(FILES ) command instead.";
}
@@ -63,7 +63,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"This command has been superceded by the install command. It "
@@ -92,7 +92,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmInstallFilesGenerator.cxx b/Source/cmInstallFilesGenerator.cxx
index 28f055f..ec02bc7 100644
--- a/Source/cmInstallFilesGenerator.cxx
+++ b/Source/cmInstallFilesGenerator.cxx
@@ -11,8 +11,6 @@
============================================================================*/
#include "cmInstallFilesGenerator.h"
-#include "cmTarget.h"
-
//----------------------------------------------------------------------------
cmInstallFilesGenerator
::cmInstallFilesGenerator(std::vector<std::string> const& files,
@@ -43,8 +41,8 @@ void cmInstallFilesGenerator::GenerateScriptActions(std::ostream& os,
const char* no_dir_permissions = 0;
this->AddInstallRule(os,
(this->Programs
- ? cmTarget::INSTALL_PROGRAMS
- : cmTarget::INSTALL_FILES),
+ ? cmInstallType_PROGRAMS
+ : cmInstallType_FILES),
this->Files,
this->Optional,
this->FilePermissions.c_str(), no_dir_permissions,
diff --git a/Source/cmInstallGenerator.cxx b/Source/cmInstallGenerator.cxx
index d7505dc..807168e 100644
--- a/Source/cmInstallGenerator.cxx
+++ b/Source/cmInstallGenerator.cxx
@@ -12,7 +12,6 @@
#include "cmInstallGenerator.h"
#include "cmSystemTools.h"
-#include "cmTarget.h"
//----------------------------------------------------------------------------
cmInstallGenerator
@@ -35,7 +34,7 @@ cmInstallGenerator
void cmInstallGenerator
::AddInstallRule(
std::ostream& os,
- int type,
+ cmInstallType type,
std::vector<std::string> const& files,
bool optional /* = false */,
const char* permissions_file /* = 0 */,
@@ -49,14 +48,13 @@ void cmInstallGenerator
std::string stype;
switch(type)
{
- case cmTarget::INSTALL_DIRECTORY:stype = "DIRECTORY"; break;
- case cmTarget::INSTALL_PROGRAMS: stype = "PROGRAM"; break;
- case cmTarget::EXECUTABLE: stype = "EXECUTABLE"; break;
- case cmTarget::STATIC_LIBRARY: stype = "STATIC_LIBRARY"; break;
- case cmTarget::SHARED_LIBRARY: stype = "SHARED_LIBRARY"; break;
- case cmTarget::MODULE_LIBRARY: stype = "MODULE"; break;
- case cmTarget::INSTALL_FILES:
- default: stype = "FILE"; break;
+ case cmInstallType_DIRECTORY: stype = "DIRECTORY"; break;
+ case cmInstallType_PROGRAMS: stype = "PROGRAM"; break;
+ case cmInstallType_EXECUTABLE: stype = "EXECUTABLE"; break;
+ case cmInstallType_STATIC_LIBRARY: stype = "STATIC_LIBRARY"; break;
+ case cmInstallType_SHARED_LIBRARY: stype = "SHARED_LIBRARY"; break;
+ case cmInstallType_MODULE_LIBRARY: stype = "MODULE"; break;
+ case cmInstallType_FILES: stype = "FILE"; break;
}
os << indent;
std::string dest = this->GetInstallDestination();
diff --git a/Source/cmInstallGenerator.h b/Source/cmInstallGenerator.h
index aa9a47c..c89ab8a 100644
--- a/Source/cmInstallGenerator.h
+++ b/Source/cmInstallGenerator.h
@@ -12,6 +12,7 @@
#ifndef cmInstallGenerator_h
#define cmInstallGenerator_h
+#include "cmInstallType.h"
#include "cmScriptGenerator.h"
class cmLocalGenerator;
@@ -29,7 +30,7 @@ public:
virtual ~cmInstallGenerator();
void AddInstallRule(
- std::ostream& os, int type,
+ std::ostream& os, cmInstallType type,
std::vector<std::string> const& files,
bool optional = false,
const char* permissions_file = 0,
diff --git a/Source/cmInstallProgramsCommand.h b/Source/cmInstallProgramsCommand.h
index 1d0d25e..29c84a0 100644
--- a/Source/cmInstallProgramsCommand.h
+++ b/Source/cmInstallProgramsCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "install_programs";}
+ virtual const char* GetName() const { return "install_programs";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the install(PROGRAMS ) command instead.";
}
@@ -64,7 +64,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"This command has been superceded by the install command. It "
@@ -89,7 +89,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmInstallTargetGenerator.cxx b/Source/cmInstallTargetGenerator.cxx
index ac1c949..5f9b658 100644
--- a/Source/cmInstallTargetGenerator.cxx
+++ b/Source/cmInstallTargetGenerator.cxx
@@ -82,8 +82,23 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
std::vector<std::string> filesFrom;
std::vector<std::string> filesTo;
std::string literal_args;
- cmTarget::TargetType type = this->Target->GetType();
- if(type == cmTarget::EXECUTABLE)
+ cmTarget::TargetType targetType = this->Target->GetType();
+ cmInstallType type = cmInstallType();
+ switch(targetType)
+ {
+ case cmTarget::EXECUTABLE: type = cmInstallType_EXECUTABLE; break;
+ case cmTarget::STATIC_LIBRARY: type = cmInstallType_STATIC_LIBRARY; break;
+ case cmTarget::SHARED_LIBRARY: type = cmInstallType_SHARED_LIBRARY; break;
+ case cmTarget::MODULE_LIBRARY: type = cmInstallType_MODULE_LIBRARY; break;
+ case cmTarget::OBJECT_LIBRARY:
+ case cmTarget::UTILITY:
+ case cmTarget::GLOBAL_TARGET:
+ case cmTarget::UNKNOWN_LIBRARY:
+ this->Target->GetMakefile()->IssueMessage(cmake::INTERNAL_ERROR,
+ "cmInstallTargetGenerator created with non-installable target.");
+ return;
+ }
+ if(targetType == cmTarget::EXECUTABLE)
{
// There is a bug in cmInstallCommand if this fails.
assert(this->NamelinkMode == NamelinkModeNone);
@@ -110,7 +125,7 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
}
// An import library looks like a static library.
- type = cmTarget::STATIC_LIBRARY;
+ type = cmInstallType_STATIC_LIBRARY;
}
else
{
@@ -121,7 +136,7 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
if(this->Target->IsAppBundleOnApple())
{
// Install the whole app bundle directory.
- type = cmTarget::INSTALL_DIRECTORY;
+ type = cmInstallType_DIRECTORY;
literal_args += " USE_SOURCE_PERMISSIONS";
from1 += ".app";
@@ -173,7 +188,7 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
}
// An import library looks like a static library.
- type = cmTarget::STATIC_LIBRARY;
+ type = cmInstallType_STATIC_LIBRARY;
}
else if(this->Target->IsFrameworkOnApple())
{
@@ -181,7 +196,7 @@ void cmInstallTargetGenerator::GenerateScriptForConfig(std::ostream& os,
assert(this->NamelinkMode == NamelinkModeNone);
// Install the whole framework directory.
- type = cmTarget::INSTALL_DIRECTORY;
+ type = cmInstallType_DIRECTORY;
literal_args += " USE_SOURCE_PERMISSIONS";
std::string from1 = fromDirConfig + targetName + ".framework";
diff --git a/Source/cmInstallTargetsCommand.h b/Source/cmInstallTargetsCommand.h
index 32641f8..e05462f 100644
--- a/Source/cmInstallTargetsCommand.h
+++ b/Source/cmInstallTargetsCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "install_targets";}
+ virtual const char* GetName() const { return "install_targets";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the install(TARGETS ) command instead.";
}
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"This command has been superceded by the install command. It "
@@ -69,7 +69,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmInstallType.h b/Source/cmInstallType.h
new file mode 100644
index 0000000..a837368
--- /dev/null
+++ b/Source/cmInstallType.h
@@ -0,0 +1,29 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2012 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.
+============================================================================*/
+#ifndef cmInstallType_h
+#define cmInstallType_h
+
+/**
+ * Enumerate types known to file(INSTALL).
+ */
+enum cmInstallType
+{
+ cmInstallType_EXECUTABLE,
+ cmInstallType_STATIC_LIBRARY,
+ cmInstallType_SHARED_LIBRARY,
+ cmInstallType_MODULE_LIBRARY,
+ cmInstallType_FILES,
+ cmInstallType_PROGRAMS,
+ cmInstallType_DIRECTORY
+};
+
+#endif
diff --git a/Source/cmLinkDirectoriesCommand.h b/Source/cmLinkDirectoriesCommand.h
index aa13589..a7cd583 100644
--- a/Source/cmLinkDirectoriesCommand.h
+++ b/Source/cmLinkDirectoriesCommand.h
@@ -43,12 +43,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "link_directories";}
+ virtual const char* GetName() const { return "link_directories";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Specify directories in which the linker will look for libraries.";
}
@@ -56,7 +56,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" link_directories(directory1 directory2 ...)\n"
diff --git a/Source/cmLinkLibrariesCommand.h b/Source/cmLinkLibrariesCommand.h
index e435126..2c0212c 100644
--- a/Source/cmLinkLibrariesCommand.h
+++ b/Source/cmLinkLibrariesCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "link_libraries";}
+ virtual const char* GetName() const { return "link_libraries";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the target_link_libraries() command instead.";
}
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"Link libraries to all targets added later.\n"
@@ -70,7 +70,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmListCommand.h b/Source/cmListCommand.h
index d215295..f20aa8a 100644
--- a/Source/cmListCommand.h
+++ b/Source/cmListCommand.h
@@ -39,17 +39,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "list";}
+ virtual const char* GetName() const { return "list";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "List operations.";
}
@@ -57,7 +57,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" list(LENGTH <list> <output variable>)\n"
diff --git a/Source/cmLoadCacheCommand.h b/Source/cmLoadCacheCommand.h
index 8ecee4a..ac50f8d 100644
--- a/Source/cmLoadCacheCommand.h
+++ b/Source/cmLoadCacheCommand.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "load_cache";}
+ virtual const char* GetName() const { return "load_cache";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Load in the values from another project's CMake cache.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" load_cache(pathToCacheFile READ_WITH_PREFIX\n"
diff --git a/Source/cmLoadCommandCommand.cxx b/Source/cmLoadCommandCommand.cxx
index 98de411..3a0115c 100644
--- a/Source/cmLoadCommandCommand.cxx
+++ b/Source/cmLoadCommandCommand.cxx
@@ -69,12 +69,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return info.Name; }
+ virtual const char* GetName() const { return info.Name; }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
if (this->info.GetTerseDocumentation)
{
@@ -123,7 +123,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
if (this->info.GetFullDocumentation)
{
diff --git a/Source/cmLoadCommandCommand.h b/Source/cmLoadCommandCommand.h
index db18428..6517019 100644
--- a/Source/cmLoadCommandCommand.h
+++ b/Source/cmLoadCommandCommand.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "load_command";}
+ virtual const char* GetName() const {return "load_command";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Load a command into a running CMake.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" load_command(COMMAND_NAME <loc1> [loc2 ...])\n"
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 3920b89..13ede5d 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -1912,24 +1912,17 @@ bool cmLocalGenerator::GetRealDependency(const char* inName,
case cmTarget::SHARED_LIBRARY:
case cmTarget::MODULE_LIBRARY:
case cmTarget::UNKNOWN_LIBRARY:
- {
- // Get the location of the target's output file and depend on it.
- if(const char* location = target->GetLocation(config))
- {
- dep = location;
- return true;
- }
- }
- break;
+ dep = target->GetLocation(config);
+ return true;
+ case cmTarget::OBJECT_LIBRARY:
+ // An object library has no single file on which to depend.
+ // This was listed to get the target-level dependency.
+ return false;
case cmTarget::UTILITY:
case cmTarget::GLOBAL_TARGET:
// A utility target has no file on which to depend. This was listed
// only to get the target-level dependency.
return false;
- case cmTarget::INSTALL_FILES:
- case cmTarget::INSTALL_PROGRAMS:
- case cmTarget::INSTALL_DIRECTORY:
- break;
}
}
@@ -2984,17 +2977,6 @@ cmLocalGenerator::GetTargetDirectory(cmTarget const&) const
return "";
}
-
-//----------------------------------------------------------------------------
-void
-cmLocalGenerator::GetTargetObjectFileDirectories(cmTarget* ,
- std::vector<std::string>&
- )
-{
- cmSystemTools::Error("GetTargetObjectFileDirectories"
- " called on cmLocalGenerator");
-}
-
//----------------------------------------------------------------------------
unsigned int cmLocalGenerator::GetBackwardsCompatibility()
{
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index 77c8862..124747b 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -160,15 +160,18 @@ public:
void AppendFeatureOptions(std::string& flags, const char* lang,
const char* feature);
- /** Translate a dependency as given in CMake code to the name to
- appear in a generated build file. If the given name is that of
- a utility target, returns false. If the given name is that of
- a CMake target it will be transformed to the real output
- location of that target for the given configuration. If the
- given name is the full path to a file it will be returned.
- Otherwise the name is treated as a relative path with respect to
- the source directory of this generator. This should only be
- used for dependencies of custom commands. */
+ /** \brief Get absolute path to dependency \a name
+ *
+ * Translate a dependency as given in CMake code to the name to
+ * appear in a generated build file.
+ * - If \a name is a utility target, returns false.
+ * - If \a name is a CMake target, it will be transformed to the real output
+ * location of that target for the given configuration.
+ * - If \a name is the full path to a file, it will be returned.
+ * - Otherwise \a name is treated as a relative path with respect to
+ * the source directory of this generator. This should only be
+ * used for dependencies of custom commands.
+ */
bool GetRealDependency(const char* name, const char* config,
std::string& dep);
@@ -258,14 +261,6 @@ public:
};
FortranFormat GetFortranFormat(const char* value);
- /** Return the directories into which object files will be put.
- * There maybe more than one for fat binary systems like OSX.
- */
- virtual void
- GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
-
/**
* Convert the given remote path to a relative path with respect to
* the given local path. The local path must be given in component
diff --git a/Source/cmLocalUnixMakefileGenerator3.cxx b/Source/cmLocalUnixMakefileGenerator3.cxx
index 75226b5..a645303 100644
--- a/Source/cmLocalUnixMakefileGenerator3.cxx
+++ b/Source/cmLocalUnixMakefileGenerator3.cxx
@@ -145,6 +145,20 @@ void cmLocalUnixMakefileGenerator3::Generate()
}
//----------------------------------------------------------------------------
+void cmLocalUnixMakefileGenerator3::AddLocalObjectFile(
+ cmTarget* target, cmSourceFile* sf, std::string objNoTargetDir,
+ bool hasSourceExtension)
+{
+ if(cmSystemTools::FileIsFullPath(objNoTargetDir.c_str()))
+ {
+ objNoTargetDir = cmSystemTools::GetFilenameName(objNoTargetDir);
+ }
+ LocalObjectInfo& info = this->LocalObjectFiles[objNoTargetDir];
+ info.HasSourceExtension = hasSourceExtension;
+ info.push_back(LocalObjectEntry(target, sf->GetLanguage()));
+}
+
+//----------------------------------------------------------------------------
void cmLocalUnixMakefileGenerator3::GetIndividualFileTargets
(std::vector<std::string>& targets)
{
@@ -344,6 +358,7 @@ void cmLocalUnixMakefileGenerator3
(t->second.GetType() == cmTarget::STATIC_LIBRARY) ||
(t->second.GetType() == cmTarget::SHARED_LIBRARY) ||
(t->second.GetType() == cmTarget::MODULE_LIBRARY) ||
+ (t->second.GetType() == cmTarget::OBJECT_LIBRARY) ||
(t->second.GetType() == cmTarget::UTILITY))
{
emitted.insert(t->second.GetName());
@@ -1995,45 +2010,6 @@ void cmLocalUnixMakefileGenerator3
}
//----------------------------------------------------------------------------
-std::string
-cmLocalUnixMakefileGenerator3
-::GetObjectFileName(cmTarget& target,
- const cmSourceFile& source,
- std::string* nameWithoutTargetDir,
- bool* hasSourceExtension)
-{
- // Make sure we never hit this old case.
- if(source.GetProperty("MACOSX_PACKAGE_LOCATION"))
- {
- std::string msg = "MACOSX_PACKAGE_LOCATION set on source file: ";
- msg += source.GetFullPath();
- this->GetMakefile()->IssueMessage(cmake::INTERNAL_ERROR,
- msg.c_str());
- }
-
- // Start with the target directory.
- std::string obj = this->GetTargetDirectory(target);
- obj += "/";
-
- // Get the object file name without the target directory.
- std::string dir_max;
- dir_max += this->Makefile->GetCurrentOutputDirectory();
- dir_max += "/";
- dir_max += obj;
- std::string objectName =
- this->GetObjectFileNameWithoutTarget(source, dir_max,
- hasSourceExtension);
- if(nameWithoutTargetDir)
- {
- *nameWithoutTargetDir = objectName;
- }
-
- // Append the object name to the target directory.
- obj += objectName;
- return obj;
-}
-
-//----------------------------------------------------------------------------
void cmLocalUnixMakefileGenerator3::WriteDisclaimer(std::ostream& os)
{
os
@@ -2267,14 +2243,3 @@ void cmLocalUnixMakefileGenerator3
}
}
}
-
-
-void cmLocalUnixMakefileGenerator3
-::GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>& dirs)
-{
- std::string dir = this->Makefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->GetTargetDirectory(*target);
- dirs.push_back(dir);
-}
diff --git a/Source/cmLocalUnixMakefileGenerator3.h b/Source/cmLocalUnixMakefileGenerator3.h
index 45ac21d..e374959 100644
--- a/Source/cmLocalUnixMakefileGenerator3.h
+++ b/Source/cmLocalUnixMakefileGenerator3.h
@@ -225,24 +225,9 @@ public:
// write the target rules for the local Makefile into the stream
void WriteLocalAllRules(std::ostream& ruleFileStream);
- struct LocalObjectEntry
- {
- cmTarget* Target;
- std::string Language;
- LocalObjectEntry(): Target(0), Language() {}
- LocalObjectEntry(cmTarget* t, const char* lang):
- Target(t), Language(lang) {}
- };
- struct LocalObjectInfo: public std::vector<LocalObjectEntry>
- {
- bool HasSourceExtension;
- bool HasPreprocessRule;
- bool HasAssembleRule;
- LocalObjectInfo():HasSourceExtension(false), HasPreprocessRule(false),
- HasAssembleRule(false) {}
- };
- std::map<cmStdString, LocalObjectInfo> const& GetLocalObjectFiles()
- { return this->LocalObjectFiles;}
+ void AddLocalObjectFile(cmTarget* target, cmSourceFile* sf,
+ std::string objNoTargetDir,
+ bool hasSourceExtension);
std::vector<cmStdString> const& GetLocalHelp() { return this->LocalHelp; }
@@ -257,9 +242,6 @@ public:
{
return !this->SkipAssemblySourceRules;
}
- // Get the directories into which the .o files will go for this target
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>& dirs);
// Fill the vector with the target names for the object files,
// preprocessed files and assembly files. Currently only used by the
@@ -301,14 +283,6 @@ protected:
void WriteTargetRequiresRule(std::ostream& ruleFileStream,
cmTarget& target,
const std::vector<std::string>& objects);
- void WriteObjectConvenienceRule(std::ostream& ruleFileStream,
- const char* comment, const char* output,
- LocalObjectInfo const& info);
-
- std::string GetObjectFileName(cmTarget& target,
- const cmSourceFile& source,
- std::string* nameWithoutTargetDir = 0,
- bool* hasSourceExtension = 0);
void AppendRuleDepend(std::vector<std::string>& depends,
const char* ruleFileName);
@@ -378,7 +352,27 @@ private:
bool SkipPreprocessedSourceRules;
bool SkipAssemblySourceRules;
+ struct LocalObjectEntry
+ {
+ cmTarget* Target;
+ std::string Language;
+ LocalObjectEntry(): Target(0), Language() {}
+ LocalObjectEntry(cmTarget* t, const char* lang):
+ Target(t), Language(lang) {}
+ };
+ struct LocalObjectInfo: public std::vector<LocalObjectEntry>
+ {
+ bool HasSourceExtension;
+ bool HasPreprocessRule;
+ bool HasAssembleRule;
+ LocalObjectInfo():HasSourceExtension(false), HasPreprocessRule(false),
+ HasAssembleRule(false) {}
+ };
std::map<cmStdString, LocalObjectInfo> LocalObjectFiles;
+ void WriteObjectConvenienceRule(std::ostream& ruleFileStream,
+ const char* comment, const char* output,
+ LocalObjectInfo const& info);
+
std::vector<cmStdString> LocalHelp;
/* does the work for each target */
diff --git a/Source/cmLocalVisualStudio6Generator.cxx b/Source/cmLocalVisualStudio6Generator.cxx
index c846d6b..f53ad0e 100644
--- a/Source/cmLocalVisualStudio6Generator.cxx
+++ b/Source/cmLocalVisualStudio6Generator.cxx
@@ -15,6 +15,7 @@
#include "cmSystemTools.h"
#include "cmSourceFile.h"
#include "cmCacheManager.h"
+#include "cmGeneratorTarget.h"
#include "cmake.h"
#include "cmComputeLinkInformation.h"
@@ -126,6 +127,7 @@ void cmLocalVisualStudio6Generator::OutputDSPFile()
switch(l->second.GetType())
{
case cmTarget::STATIC_LIBRARY:
+ case cmTarget::OBJECT_LIBRARY:
this->SetBuildType(STATIC_LIBRARY, l->first.c_str(), l->second);
break;
case cmTarget::SHARED_LIBRARY:
@@ -336,9 +338,6 @@ void cmLocalVisualStudio6Generator::WriteDSPFile(std::ostream& fout,
}
}
- // Compute which sources need unique object computation.
- this->ComputeObjectNameRequirements(sourceGroups);
-
// Write the DSP file's header.
this->WriteDSPHeader(fout, libName, target, sourceGroups);
@@ -358,6 +357,8 @@ void cmLocalVisualStudio6Generator
::WriteGroup(const cmSourceGroup *sg, cmTarget& target,
std::ostream &fout, const char *libName)
{
+ cmGeneratorTarget* gt =
+ this->GlobalGenerator->GetGeneratorTarget(&target);
const std::vector<const cmSourceFile *> &sourceFiles =
sg->GetSourceFiles();
// If the group is empty, don't write it at all.
@@ -374,28 +375,6 @@ void cmLocalVisualStudio6Generator
this->WriteDSPBeginGroup(fout, name.c_str(), "");
}
- // Compute the maximum length configuration name.
- std::string config_max;
- for(std::vector<std::string>::iterator i = this->Configurations.begin();
- i != this->Configurations.end(); ++i)
- {
- // Strip the subdirectory name out of the configuration name.
- std::string config = this->GetConfigName(*i);
- if(config.size() > config_max.size())
- {
- config_max = config;
- }
- }
-
- // Compute the maximum length full path to the intermediate
- // files directory for any configuration. This is used to construct
- // object file names that do not produce paths that are too long.
- std::string dir_max;
- dir_max += this->Makefile->GetCurrentOutputDirectory();
- dir_max += "/";
- dir_max += config_max;
- dir_max += "/";
-
// Loop through each source in the source group.
for(std::vector<const cmSourceFile *>::const_iterator sf =
sourceFiles.begin(); sf != sourceFiles.end(); ++sf)
@@ -406,11 +385,9 @@ void cmLocalVisualStudio6Generator
std::string compileFlags;
std::vector<std::string> depends;
std::string objectNameDir;
- if(this->NeedObjectName.find(*sf) != this->NeedObjectName.end())
+ if(gt->ExplicitObjectName.find(*sf) != gt->ExplicitObjectName.end())
{
- objectNameDir =
- cmSystemTools::GetFilenamePath(
- this->GetObjectFileNameWithoutTarget(*(*sf), dir_max));
+ objectNameDir = cmSystemTools::GetFilenamePath(gt->Objects[*sf]);
}
// Add per-source file flags.
@@ -1264,8 +1241,18 @@ void cmLocalVisualStudio6Generator
outputNameMinSizeRel = target.GetFullName("MinSizeRel");
outputNameRelWithDebInfo = target.GetFullName("RelWithDebInfo");
}
+ else if(target.GetType() == cmTarget::OBJECT_LIBRARY)
+ {
+ outputName = target.GetName();
+ outputName += ".lib";
+ outputNameDebug = outputName;
+ outputNameRelease = outputName;
+ outputNameMinSizeRel = outputName;
+ outputNameRelWithDebInfo = outputName;
+ }
// Compute the output directory for the target.
+ std::string outputDirOld;
std::string outputDirDebug;
std::string outputDirRelease;
std::string outputDirMinSizeRel;
@@ -1275,6 +1262,11 @@ void cmLocalVisualStudio6Generator
target.GetType() == cmTarget::SHARED_LIBRARY ||
target.GetType() == cmTarget::MODULE_LIBRARY)
{
+#ifdef CM_USE_OLD_VS6
+ outputDirOld =
+ removeQuotes(this->ConvertToOptionallyRelativeOutputPath
+ (target.GetDirectory().c_str()));
+#endif
outputDirDebug =
removeQuotes(this->ConvertToOptionallyRelativeOutputPath(
target.GetDirectory("Debug").c_str()));
@@ -1288,6 +1280,14 @@ void cmLocalVisualStudio6Generator
removeQuotes(this->ConvertToOptionallyRelativeOutputPath(
target.GetDirectory("RelWithDebInfo").c_str()));
}
+ else if(target.GetType() == cmTarget::OBJECT_LIBRARY)
+ {
+ std::string outputDir = cmake::GetCMakeFilesDirectoryPostSlash();
+ outputDirDebug = outputDir + "Debug";
+ outputDirRelease = outputDir + "Release";
+ outputDirMinSizeRel = outputDir + "MinSizeRel";
+ outputDirRelWithDebInfo = outputDir + "RelWithDebInfo";
+ }
// Compute the proper link information for the target.
std::string optionsDebug;
@@ -1456,7 +1456,8 @@ void cmLocalVisualStudio6Generator
libnameExports.c_str());
cmSystemTools::ReplaceString(line, "CMAKE_MFC_FLAG",
mfcFlag);
- if(target.GetType() == cmTarget::STATIC_LIBRARY )
+ if(target.GetType() == cmTarget::STATIC_LIBRARY ||
+ target.GetType() == cmTarget::OBJECT_LIBRARY)
{
cmSystemTools::ReplaceString(line, "CM_STATIC_LIB_ARGS_DEBUG",
staticLibOptionsDebug.c_str());
@@ -1555,7 +1556,7 @@ void cmLocalVisualStudio6Generator
(exePath.c_str())).c_str());
#endif
- if(targetBuilds)
+ if(targetBuilds || target.GetType() == cmTarget::OBJECT_LIBRARY)
{
cmSystemTools::ReplaceString(line, "OUTPUT_DIRECTORY_DEBUG",
outputDirDebug.c_str());
@@ -1565,13 +1566,11 @@ void cmLocalVisualStudio6Generator
outputDirMinSizeRel.c_str());
cmSystemTools::ReplaceString(line, "OUTPUT_DIRECTORY_RELWITHDEBINFO",
outputDirRelWithDebInfo.c_str());
-#ifdef CM_USE_OLD_VS6
- std::string outPath = target.GetDirectory();
- cmSystemTools::ReplaceString
- (line, "OUTPUT_DIRECTORY",
- removeQuotes(this->ConvertToOptionallyRelativeOutputPath
- (outPath.c_str())).c_str());
-#endif
+ if(!outputDirOld.empty())
+ {
+ cmSystemTools::ReplaceString(line, "OUTPUT_DIRECTORY",
+ outputDirOld.c_str());
+ }
}
cmSystemTools::ReplaceString(line,
@@ -1620,11 +1619,13 @@ void cmLocalVisualStudio6Generator
flagsDebugRel = this->Makefile->GetSafeDefinition(flagVar.c_str());
flagsDebugRel += " -DCMAKE_INTDIR=\\\"RelWithDebInfo\\\" ";
}
-
- // if unicode is not found, then add -D_MBCS
+
+ // if _UNICODE and _SBCS are not found, then add -D_MBCS
std::string defs = this->Makefile->GetDefineFlags();
if(flags.find("D_UNICODE") == flags.npos &&
- defs.find("D_UNICODE") == flags.npos)
+ defs.find("D_UNICODE") == flags.npos &&
+ flags.find("D_SBCS") == flags.npos &&
+ defs.find("D_SBCS") == flags.npos)
{
flags += " /D \"_MBCS\"";
}
@@ -1793,15 +1794,34 @@ cmLocalVisualStudio6Generator
return "";
}
-void cmLocalVisualStudio6Generator
-::GetTargetObjectFileDirectories(cmTarget* ,
- std::vector<std::string>&
- dirs)
+//----------------------------------------------------------------------------
+std::string
+cmLocalVisualStudio6Generator
+::ComputeLongestObjectDirectory(cmTarget&) const
{
- std::string dir = this->Makefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->GetGlobalGenerator()->GetCMakeCFGInitDirectory();
- dirs.push_back(dir);
+ // Compute the maximum length configuration name.
+ std::string config_max;
+ for(std::vector<std::string>::const_iterator
+ i = this->Configurations.begin();
+ i != this->Configurations.end(); ++i)
+ {
+ // Strip the subdirectory name out of the configuration name.
+ std::string config = this->GetConfigName(*i);
+ if(config.size() > config_max.size())
+ {
+ config_max = config;
+ }
+ }
+
+ // Compute the maximum length full path to the intermediate
+ // files directory for any configuration. This is used to construct
+ // object file names that do not produce paths that are too long.
+ std::string dir_max;
+ dir_max += this->Makefile->GetCurrentOutputDirectory();
+ dir_max += "/";
+ dir_max += config_max;
+ dir_max += "/";
+ return dir_max;
}
std::string
diff --git a/Source/cmLocalVisualStudio6Generator.h b/Source/cmLocalVisualStudio6Generator.h
index c9c5dd1..d36d633 100644
--- a/Source/cmLocalVisualStudio6Generator.h
+++ b/Source/cmLocalVisualStudio6Generator.h
@@ -50,9 +50,7 @@ public:
void SetBuildType(BuildType, const char* libName, cmTarget&);
virtual std::string GetTargetDirectory(cmTarget const& target) const;
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
+ virtual std::string ComputeLongestObjectDirectory(cmTarget&) const;
private:
std::string DSPHeaderTemplate;
std::string DSPFooterTemplate;
diff --git a/Source/cmLocalVisualStudio7Generator.cxx b/Source/cmLocalVisualStudio7Generator.cxx
index 1743517..2f145a6 100644
--- a/Source/cmLocalVisualStudio7Generator.cxx
+++ b/Source/cmLocalVisualStudio7Generator.cxx
@@ -17,6 +17,7 @@
#include "cmSystemTools.h"
#include "cmSourceFile.h"
#include "cmCacheManager.h"
+#include "cmGeneratorTarget.h"
#include "cmake.h"
#include "cmComputeLinkInformation.h"
@@ -641,6 +642,8 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
bool targetBuilds = true;
switch(target.GetType())
{
+ case cmTarget::OBJECT_LIBRARY:
+ targetBuilds = false; // TODO: PDB for object library?
case cmTarget::STATIC_LIBRARY:
projectType = "typeStaticLibrary";
configType = "4";
@@ -774,6 +777,10 @@ void cmLocalVisualStudio7Generator::WriteConfiguration(std::ostream& fout,
{
fout << "\t\t\tCharacterSet=\"1\">\n";
}
+ else if(targetOptions.UsingSBCS())
+ {
+ fout << "\t\t\tCharacterSet=\"0\">\n";
+ }
else
{
fout << "\t\t\tCharacterSet=\"2\">\n";
@@ -996,6 +1003,22 @@ void cmLocalVisualStudio7Generator::OutputBuildTool(std::ostream& fout,
}
switch(target.GetType())
{
+ case cmTarget::OBJECT_LIBRARY:
+ {
+ std::string libpath = this->GetTargetDirectory(target);
+ libpath += "/";
+ libpath += configName;
+ libpath += "/";
+ libpath += target.GetName();
+ libpath += ".lib";
+ const char* tool =
+ this->FortranProject? "VFLibrarianTool":"VCLibrarianTool";
+ fout << "\t\t\t<Tool\n"
+ << "\t\t\t\tName=\"" << tool << "\"\n";
+ fout << "\t\t\t\tOutputFile=\""
+ << this->ConvertToXMLOutputPathSingle(libpath.c_str()) << "\"/>\n";
+ break;
+ }
case cmTarget::STATIC_LIBRARY:
{
std::string targetNameFull = target.GetFullName(configName);
@@ -1306,9 +1329,6 @@ void cmLocalVisualStudio7Generator::WriteVCProjFile(std::ostream& fout,
sourceGroup.AssignSource(*i);
}
- // Compute which sources need unique object computation.
- this->ComputeObjectNameRequirements(sourceGroups);
-
// open the project
this->WriteProjectStart(fout, libName, target, sourceGroups);
// write the configuration information
@@ -1348,8 +1368,7 @@ public:
cmLocalVisualStudio7GeneratorFCInfo(cmLocalVisualStudio7Generator* lg,
cmTarget& target,
cmSourceFile const& sf,
- std::vector<std::string>* configs,
- std::string const& dir_max);
+ std::vector<std::string>* configs);
std::map<cmStdString, cmLVS7GFileConfig> FileConfigMap;
};
@@ -1357,13 +1376,14 @@ cmLocalVisualStudio7GeneratorFCInfo
::cmLocalVisualStudio7GeneratorFCInfo(cmLocalVisualStudio7Generator* lg,
cmTarget& target,
cmSourceFile const& sf,
- std::vector<std::string>* configs,
- std::string const& dir_max)
+ std::vector<std::string>* configs)
{
+ cmGeneratorTarget* gt =
+ lg->GetGlobalGenerator()->GetGeneratorTarget(&target);
std::string objectName;
- if(lg->NeedObjectName.find(&sf) != lg->NeedObjectName.end())
+ if(gt->ExplicitObjectName.find(&sf) != gt->ExplicitObjectName.end())
{
- objectName = lg->GetObjectFileNameWithoutTarget(sf, dir_max);
+ objectName = gt->Objects[&sf];
}
// Compute per-source, per-config information.
@@ -1474,11 +1494,11 @@ cmLocalVisualStudio7GeneratorFCInfo
}
}
-
-void cmLocalVisualStudio7Generator
-::ComputeMaxDirectoryLength(std::string& maxdir,
- cmTarget& target)
-{
+//----------------------------------------------------------------------------
+std::string
+cmLocalVisualStudio7Generator
+::ComputeLongestObjectDirectory(cmTarget& target) const
+{
std::vector<std::string> *configs =
static_cast<cmGlobalVisualStudio7Generator *>
(this->GlobalGenerator)->GetConfigurations();
@@ -1503,7 +1523,7 @@ void cmLocalVisualStudio7Generator
dir_max += "/";
dir_max += config_max;
dir_max += "/";
- maxdir = dir_max;
+ return dir_max;
}
void cmLocalVisualStudio7Generator
@@ -1526,19 +1546,13 @@ void cmLocalVisualStudio7Generator
this->WriteVCProjBeginGroup(fout, name.c_str(), "");
}
- // Compute the maximum length full path to the intermediate
- // files directory for any configuration. This is used to construct
- // object file names that do not produce paths that are too long.
- std::string dir_max;
- this->ComputeMaxDirectoryLength(dir_max, target);
-
// Loop through each source in the source group.
std::string objectName;
for(std::vector<const cmSourceFile *>::const_iterator sf =
sourceFiles.begin(); sf != sourceFiles.end(); ++sf)
{
std::string source = (*sf)->GetFullPath();
- FCInfo fcinfo(this, target, *(*sf), configs, dir_max);
+ FCInfo fcinfo(this, target, *(*sf), configs);
if (source != libName || target.GetType() == cmTarget::UTILITY ||
target.GetType() == cmTarget::GLOBAL_TARGET )
@@ -2114,19 +2128,6 @@ std::string cmLocalVisualStudio7Generator
return dir;
}
-void cmLocalVisualStudio7Generator::
-GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs)
-{
- std::string dir = this->Makefile->GetCurrentOutputDirectory();
- dir += "/";
- dir += this->GetTargetDirectory(*target);
- dir += "/";
- dir += this->GetGlobalGenerator()->GetCMakeCFGInitDirectory();
- dirs.push_back(dir);
-}
-
//----------------------------------------------------------------------------
#include <windows.h>
static bool cmLVS6G_IsFAT(const char* dir)
diff --git a/Source/cmLocalVisualStudio7Generator.h b/Source/cmLocalVisualStudio7Generator.h
index 5b634b8..9d3a9f2 100644
--- a/Source/cmLocalVisualStudio7Generator.h
+++ b/Source/cmLocalVisualStudio7Generator.h
@@ -54,20 +54,13 @@ public:
void SetBuildType(BuildType,const char *name);
void SetPlatformName(const char* n) { this->PlatformName = n;}
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
void SetExtraFlagTable(cmVS7FlagTable const* table)
{ this->ExtraFlagTable = table; }
virtual std::string GetTargetDirectory(cmTarget const&) const;
cmSourceFile* CreateVCProjBuildRule();
void WriteStampFiles();
- // Compute the maximum length full path to the intermediate
- // files directory for any configuration. This is used to construct
- // object file names that do not produce paths that are too long.
- void ComputeMaxDirectoryLength(std::string& maxdir,
- cmTarget& target);
+ virtual std::string ComputeLongestObjectDirectory(cmTarget&) const;
virtual void ReadAndStoreExternalGUID(const char* name,
const char* path);
diff --git a/Source/cmLocalVisualStudioGenerator.cxx b/Source/cmLocalVisualStudioGenerator.cxx
index de1ac30..4bcf4de 100644
--- a/Source/cmLocalVisualStudioGenerator.cxx
+++ b/Source/cmLocalVisualStudioGenerator.cxx
@@ -65,96 +65,6 @@ cmLocalVisualStudioGenerator::MaybeCreateImplibDir(cmTarget& target,
}
//----------------------------------------------------------------------------
-bool cmLocalVisualStudioGenerator::SourceFileCompiles(const cmSourceFile* sf)
-{
- // Identify the language of the source file.
- if(const char* lang = this->GetSourceFileLanguage(*sf))
- {
- // Check whether this source will actually be compiled.
- return (!sf->GetCustomCommand() &&
- !sf->GetPropertyAsBool("HEADER_FILE_ONLY") &&
- !sf->GetPropertyAsBool("EXTERNAL_OBJECT"));
- }
- else
- {
- // Unknown source file language. Assume it will not be compiled.
- return false;
- }
-}
-
-//----------------------------------------------------------------------------
-void cmLocalVisualStudioGenerator::CountObjectNames(
- const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& counts)
-{
- for(unsigned int i = 0; i < groups.size(); ++i)
- {
- cmSourceGroup sg = groups[i];
- std::vector<const cmSourceFile*> const& srcs = sg.GetSourceFiles();
- for(std::vector<const cmSourceFile*>::const_iterator s = srcs.begin();
- s != srcs.end(); ++s)
- {
- const cmSourceFile* sf = *s;
- if(this->SourceFileCompiles(sf))
- {
- std::string objectName = cmSystemTools::LowerCase(
- cmSystemTools::GetFilenameWithoutLastExtension(
- sf->GetFullPath()));
- objectName += ".obj";
- counts[objectName] += 1;
- }
- }
- this->CountObjectNames(sg.GetGroupChildren(), counts);
- }
-}
-
-//----------------------------------------------------------------------------
-void cmLocalVisualStudioGenerator::InsertNeedObjectNames(
- const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& count)
-{
- for(unsigned int i = 0; i < groups.size(); ++i)
- {
- cmSourceGroup sg = groups[i];
- std::vector<const cmSourceFile*> const& srcs = sg.GetSourceFiles();
- for(std::vector<const cmSourceFile*>::const_iterator s = srcs.begin();
- s != srcs.end(); ++s)
- {
- const cmSourceFile* sf = *s;
- if(this->SourceFileCompiles(sf))
- {
- std::string objectName = cmSystemTools::LowerCase(
- cmSystemTools::GetFilenameWithoutLastExtension(sf->GetFullPath()));
- objectName += ".obj";
- if(count[objectName] > 1)
- {
- this->NeedObjectName.insert(sf);
- }
- }
- }
- this->InsertNeedObjectNames(sg.GetGroupChildren(), count);
- }
-}
-
-
-//----------------------------------------------------------------------------
-void cmLocalVisualStudioGenerator::ComputeObjectNameRequirements
-(std::vector<cmSourceGroup> const& sourceGroups)
-{
- // Clear the current set of requirements.
- this->NeedObjectName.clear();
-
- // Count the number of object files with each name. Note that
- // windows file names are not case sensitive.
- std::map<cmStdString, int> objectNameCounts;
- this->CountObjectNames(sourceGroups, objectNameCounts);
-
- // For all source files producing duplicate names we need unique
- // object name computation.
- this->InsertNeedObjectNames(sourceGroups, objectNameCounts);
-}
-
-//----------------------------------------------------------------------------
const char* cmLocalVisualStudioGenerator::ReportErrorLabel() const
{
return ":VCReportError";
diff --git a/Source/cmLocalVisualStudioGenerator.h b/Source/cmLocalVisualStudioGenerator.h
index fcf1f21..410cc9a 100644
--- a/Source/cmLocalVisualStudioGenerator.h
+++ b/Source/cmLocalVisualStudioGenerator.h
@@ -56,6 +56,8 @@ public:
/** Version of Visual Studio. */
VSVersion GetVersion() const { return this->Version; }
+ virtual std::string ComputeLongestObjectDirectory(cmTarget&) const = 0;
+
protected:
virtual const char* ReportErrorLabel() const;
virtual bool CustomCommandUseLocal() const { return false; }
@@ -64,16 +66,6 @@ protected:
cmsys::auto_ptr<cmCustomCommand>
MaybeCreateImplibDir(cmTarget& target, const char* config, bool isFortran);
- // Safe object file name generation.
- void ComputeObjectNameRequirements(std::vector<cmSourceGroup> const&);
- bool SourceFileCompiles(const cmSourceFile* sf);
- void CountObjectNames(const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& count);
- void InsertNeedObjectNames(const std::vector<cmSourceGroup>& groups,
- std::map<cmStdString, int>& count);
- std::set<const cmSourceFile*> NeedObjectName;
- friend class cmVisualStudio10TargetGenerator;
-
VSVersion Version;
};
diff --git a/Source/cmLocalXCodeGenerator.cxx b/Source/cmLocalXCodeGenerator.cxx
index b989870..551ebd3 100644
--- a/Source/cmLocalXCodeGenerator.cxx
+++ b/Source/cmLocalXCodeGenerator.cxx
@@ -33,16 +33,3 @@ cmLocalXCodeGenerator::GetTargetDirectory(cmTarget const&) const
// No per-target directory for this generator (yet).
return "";
}
-
-//----------------------------------------------------------------------------
-void cmLocalXCodeGenerator::
-GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs)
-{
- cmGlobalXCodeGenerator* g =
- (cmGlobalXCodeGenerator*)this->GetGlobalGenerator();
- g->SetCurrentLocalGenerator(this);
- g->GetTargetObjectFileDirectories(target,
- dirs);
-}
diff --git a/Source/cmLocalXCodeGenerator.h b/Source/cmLocalXCodeGenerator.h
index 1ab805d..eab228f 100644
--- a/Source/cmLocalXCodeGenerator.h
+++ b/Source/cmLocalXCodeGenerator.h
@@ -27,9 +27,6 @@ public:
cmLocalXCodeGenerator();
virtual ~cmLocalXCodeGenerator();
- void GetTargetObjectFileDirectories(cmTarget* target,
- std::vector<std::string>&
- dirs);
virtual std::string GetTargetDirectory(cmTarget const& target) const;
private:
diff --git a/Source/cmMacroCommand.cxx b/Source/cmMacroCommand.cxx
index f81a63d..2599227 100644
--- a/Source/cmMacroCommand.cxx
+++ b/Source/cmMacroCommand.cxx
@@ -28,7 +28,7 @@ public:
* cmMacroHelperCommand and cmFunctionHelperCommand
* which cannot provide appropriate documentation.
*/
- virtual bool ShouldAppearInDocumentation()
+ virtual bool ShouldAppearInDocumentation() const
{
return false;
}
@@ -50,7 +50,7 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* This is called when the command is first encountered in
@@ -65,12 +65,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return this->Args[0].c_str(); }
+ virtual const char* GetName() const { return this->Args[0].c_str(); }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
std::string docs = "Macro named: ";
docs += this->GetName();
@@ -80,7 +80,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return this->GetTerseDocumentation();
}
diff --git a/Source/cmMacroCommand.h b/Source/cmMacroCommand.h
index 93e10b2..36e4b2f 100644
--- a/Source/cmMacroCommand.h
+++ b/Source/cmMacroCommand.h
@@ -15,11 +15,6 @@
#include "cmCommand.h"
#include "cmFunctionBlocker.h"
-/** \class cmMacroFunctionBlocker
- * \brief subclass of function blocker
- *
- *
- */
class cmMacroFunctionBlocker : public cmFunctionBlocker
{
public:
@@ -35,11 +30,7 @@ public:
int Depth;
};
-/** \class cmMacroCommand
- * \brief starts an if block
- *
- * cmMacroCommand starts an if block
- */
+/// Starts macro() ... endmacro() block
class cmMacroCommand : public cmCommand
{
public:
@@ -61,17 +52,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "macro";}
+ virtual const char* GetName() const { return "macro";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Start recording a macro for later invocation as a command.";
}
@@ -79,7 +70,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" macro(<name> [arg1 [arg2 [arg3 ...]]])\n"
diff --git a/Source/cmMakeDirectoryCommand.h b/Source/cmMakeDirectoryCommand.h
index 63b91d1..4e6e1d5 100644
--- a/Source/cmMakeDirectoryCommand.h
+++ b/Source/cmMakeDirectoryCommand.h
@@ -44,17 +44,17 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "make_directory";}
+ virtual const char* GetName() const { return "make_directory";}
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the file(MAKE_DIRECTORY ) command instead.";
}
@@ -62,7 +62,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" make_directory(directory)\n"
@@ -72,7 +72,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index d206d32..aba2e38 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -209,9 +209,9 @@ cmMakefile::~cmMakefile()
{
delete *i;
}
- for(unsigned int i=0; i < this->UsedCommands.size(); i++)
+ for(unsigned int i=0; i < this->FinalPassCommands.size(); i++)
{
- delete this->UsedCommands[i];
+ delete this->FinalPassCommands[i];
}
std::vector<cmFunctionBlocker*>::iterator pos;
for (pos = this->FunctionBlockers.begin();
@@ -418,7 +418,7 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
else if(pcmd->HasFinalPass())
{
// use the command
- this->UsedCommands.push_back(pcmd.release());
+ this->FinalPassCommands.push_back(pcmd.release());
}
}
else if ( this->GetCMakeInstance()->GetWorkingMode() == cmake::SCRIPT_MODE
@@ -810,8 +810,8 @@ void cmMakefile::FinalPass()
// give all the commands a chance to do something
// after the file has been parsed before generation
- for(std::vector<cmCommand*>::iterator i = this->UsedCommands.begin();
- i != this->UsedCommands.end(); ++i)
+ for(std::vector<cmCommand*>::iterator i = this->FinalPassCommands.begin();
+ i != this->FinalPassCommands.end(); ++i)
{
(*i)->FinalPass();
}
@@ -853,6 +853,14 @@ cmMakefile::AddCustomCommandToTarget(const char* target,
cmTargets::iterator ti = this->Targets.find(target);
if(ti != this->Targets.end())
{
+ if(ti->second.GetType() == cmTarget::OBJECT_LIBRARY)
+ {
+ cmOStringStream e;
+ e << "Target \"" << target << "\" is an OBJECT library "
+ "that may not have PRE_BUILD, PRE_LINK, or POST_BUILD commands.";
+ this->IssueMessage(cmake::FATAL_ERROR, e.str());
+ return;
+ }
// Add the command to the appropriate build step for the target.
std::vector<std::string> no_output;
cmCustomCommand cc(this, no_output, depends,
@@ -945,7 +953,7 @@ cmMakefile::AddCustomCommandToOutput(const std::vector<std::string>& outputs,
outName += ".rule";
const char* dir =
this->LocalGenerator->GetGlobalGenerator()->
- GetCMakeCFGInitDirectory();
+ GetCMakeCFGIntDir();
if(dir && dir[0] == '$')
{
cmSystemTools::ReplaceString(outName, dir,
@@ -1912,8 +1920,11 @@ cmTarget* cmMakefile::AddLibrary(const char* lname, cmTarget::TargetType type,
// wrong type ? default to STATIC
if ( (type != cmTarget::STATIC_LIBRARY)
&& (type != cmTarget::SHARED_LIBRARY)
- && (type != cmTarget::MODULE_LIBRARY))
+ && (type != cmTarget::MODULE_LIBRARY)
+ && (type != cmTarget::OBJECT_LIBRARY))
{
+ this->IssueMessage(cmake::INTERNAL_ERROR,
+ "cmMakefile::AddLibrary given invalid target type.");
type = cmTarget::STATIC_LIBRARY;
}
@@ -2132,7 +2143,7 @@ void cmMakefile::ExpandVariables()
l != this->Targets.end(); ++l)
{
cmTarget &t = l->second;
- const char *includeDirs = t.GetProperty("INCLUDE_DIRECTORIES");
+ includeDirs = t.GetProperty("INCLUDE_DIRECTORIES");
if (includeDirs)
{
std::string dirs = includeDirs;
@@ -2865,7 +2876,7 @@ void cmMakefile::EnableLanguage(std::vector<std::string> const & lang,
{
this->AddDefinition("CMAKE_CFG_INTDIR",
this->LocalGenerator->GetGlobalGenerator()
- ->GetCMakeCFGInitDirectory());
+ ->GetCMakeCFGIntDir());
this->LocalGenerator->GetGlobalGenerator()->EnableLanguage(lang, this,
optional);
}
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index c2939fb..960ba39 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -604,12 +604,6 @@ public:
*/
bool CanIWriteThisFile(const char* fileName);
- /**
- * Get the vector of used command instances.
- */
- const std::vector<cmCommand*>& GetUsedCommands() const
- {return this->UsedCommands;}
-
#if defined(CMAKE_BUILD_WITH_CMAKE)
/**
* Get the vector source groups.
@@ -895,7 +889,7 @@ protected:
std::vector<cmSourceGroup> SourceGroups;
#endif
- std::vector<cmCommand*> UsedCommands;
+ std::vector<cmCommand*> FinalPassCommands;
cmLocalGenerator* LocalGenerator;
bool IsFunctionBlocked(const cmListFileFunction& lff,
cmExecutionStatus &status);
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index b4174cc..38aa59d 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -101,6 +101,9 @@ void cmMakefileLibraryTargetGenerator::WriteRuleFiles()
this->WriteModuleLibraryRules(true);
}
break;
+ case cmTarget::OBJECT_LIBRARY:
+ this->WriteObjectLibraryRules();
+ break;
default:
// If language is not known, this is an error.
cmSystemTools::Error("Unknown Library Type");
@@ -122,6 +125,29 @@ void cmMakefileLibraryTargetGenerator::WriteRuleFiles()
}
//----------------------------------------------------------------------------
+void cmMakefileLibraryTargetGenerator::WriteObjectLibraryRules()
+{
+ std::vector<std::string> commands;
+ std::vector<std::string> depends;
+
+ // Add post-build rules.
+ this->LocalGenerator->
+ AppendCustomCommands(commands, this->Target->GetPostBuildCommands(),
+ this->Target);
+
+ // Depend on the object files.
+ this->AppendObjectDepends(depends);
+
+ // Write the rule.
+ this->LocalGenerator->WriteMakeRule(*this->BuildFileStream, 0,
+ this->Target->GetName(),
+ depends, commands, true);
+
+ // Write the main driver rule to build everything in this target.
+ this->WriteTargetDriverRule(this->Target->GetName(), false);
+}
+
+//----------------------------------------------------------------------------
void cmMakefileLibraryTargetGenerator::WriteStaticLibraryRules()
{
const char* linkLanguage =
diff --git a/Source/cmMakefileLibraryTargetGenerator.h b/Source/cmMakefileLibraryTargetGenerator.h
index f3c47db..e6a5867 100644
--- a/Source/cmMakefileLibraryTargetGenerator.h
+++ b/Source/cmMakefileLibraryTargetGenerator.h
@@ -25,6 +25,7 @@ public:
virtual void WriteRuleFiles();
protected:
+ void WriteObjectLibraryRules();
void WriteStaticLibraryRules();
void WriteSharedLibraryRules(bool relink);
void WriteModuleLibraryRules(bool relink);
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index e5be4aa..d0cfd99 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -11,6 +11,7 @@
============================================================================*/
#include "cmMakefileTargetGenerator.h"
+#include "cmGeneratorTarget.h"
#include "cmGeneratedFileStream.h"
#include "cmGlobalGenerator.h"
#include "cmGlobalUnixMakefileGenerator3.h"
@@ -42,6 +43,7 @@ cmMakefileTargetGenerator::cmMakefileTargetGenerator(cmTarget* target)
this->GlobalGenerator =
static_cast<cmGlobalUnixMakefileGenerator3*>(
this->LocalGenerator->GetGlobalGenerator());
+ this->GeneratorTarget = this->GlobalGenerator->GetGeneratorTarget(target);
cmake* cm = this->GlobalGenerator->GetCMakeInstance();
this->NoRuleMessages = false;
if(const char* ruleStatus = cm->GetProperty("RULE_MESSAGES"))
@@ -63,6 +65,7 @@ cmMakefileTargetGenerator::New(cmTarget *tgt)
case cmTarget::STATIC_LIBRARY:
case cmTarget::SHARED_LIBRARY:
case cmTarget::MODULE_LIBRARY:
+ case cmTarget::OBJECT_LIBRARY:
result = new cmMakefileLibraryTargetGenerator(tgt);
break;
case cmTarget::UTILITY:
@@ -131,58 +134,46 @@ void cmMakefileTargetGenerator::WriteTargetBuildRules()
// First generate the object rule files. Save a list of all object
// files for this target.
- const std::vector<cmSourceFile*>& sources = this->Target->GetSourceFiles();
- for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
- source != sources.end(); ++source)
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = this->GeneratorTarget->CustomCommands.begin();
+ si != this->GeneratorTarget->CustomCommands.end(); ++si)
{
- cmTarget::SourceFileFlags tsFlags =
- this->Target->GetTargetSourceFileFlags(*source);
- if(cmCustomCommand* cc = (*source)->GetCustomCommand())
+ cmCustomCommand const* cc = (*si)->GetCustomCommand();
+ this->GenerateCustomRuleFile(*cc);
+ if (clean)
{
- this->GenerateCustomRuleFile(*cc);
- if (clean)
- {
- const std::vector<std::string>& outputs = cc->GetOutputs();
- for(std::vector<std::string>::const_iterator o = outputs.begin();
- o != outputs.end(); ++o)
- {
- this->CleanFiles.push_back
- (this->Convert(o->c_str(),
- cmLocalGenerator::START_OUTPUT,
- cmLocalGenerator::UNCHANGED));
- }
- }
- }
- else if(tsFlags.Type != cmTarget::SourceFileTypeNormal)
- {
- this->WriteMacOSXContentRules(*(*source), tsFlags.MacFolder);
- }
- else if(!(*source)->GetPropertyAsBool("HEADER_FILE_ONLY"))
- {
- if(!this->GlobalGenerator->IgnoreFile
- ((*source)->GetExtension().c_str()))
- {
- // Generate this object file's rule file.
- this->WriteObjectRuleFiles(*(*source));
- }
- else if((*source)->GetPropertyAsBool("EXTERNAL_OBJECT"))
- {
- // This is an external object file. Just add it.
- this->ExternalObjects.push_back((*source)->GetFullPath());
- }
- else if(cmSystemTools::UpperCase((*source)->GetExtension()) == "DEF")
- {
- this->ModuleDefinitionFile = (*source)->GetFullPath();
- }
- else
+ const std::vector<std::string>& outputs = cc->GetOutputs();
+ for(std::vector<std::string>::const_iterator o = outputs.begin();
+ o != outputs.end(); ++o)
{
- // We only get here if a source file is not an external object
- // and has an extension that is listed as an ignored file type
- // for this language. No message or diagnosis should be
- // given.
+ this->CleanFiles.push_back
+ (this->Convert(o->c_str(),
+ cmLocalGenerator::START_OUTPUT,
+ cmLocalGenerator::UNCHANGED));
}
}
}
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = this->GeneratorTarget->OSXContent.begin();
+ si != this->GeneratorTarget->OSXContent.end(); ++si)
+ {
+ cmTarget::SourceFileFlags tsFlags =
+ this->Target->GetTargetSourceFileFlags(*si);
+ this->WriteMacOSXContentRules(**si, tsFlags.MacFolder);
+ }
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = this->GeneratorTarget->ExternalObjects.begin();
+ si != this->GeneratorTarget->ExternalObjects.end(); ++si)
+ {
+ this->ExternalObjects.push_back((*si)->GetFullPath());
+ }
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = this->GeneratorTarget->ObjectSources.begin();
+ si != this->GeneratorTarget->ObjectSources.end(); ++si)
+ {
+ // Generate this object file's rule file.
+ this->WriteObjectRuleFiles(**si);
+ }
}
@@ -428,12 +419,10 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(cmSourceFile& source)
}
// Get the full path name of the object file.
- bool hasSourceExtension;
- std::string objNoTargetDir;
- std::string obj =
- this->LocalGenerator->GetObjectFileName(*this->Target, source,
- &objNoTargetDir,
- &hasSourceExtension);
+ std::string const& objectName = this->GeneratorTarget->Objects[&source];
+ std::string obj = this->LocalGenerator->GetTargetDirectory(*this->Target);
+ obj += "/";
+ obj += objectName;
// Avoid generating duplicate rules.
if(this->ObjectFiles.find(obj) == this->ObjectFiles.end())
@@ -487,18 +476,6 @@ void cmMakefileTargetGenerator::WriteObjectRuleFiles(cmSourceFile& source)
AddImplicitDepends(*this->Target, lang,
objFullPath.c_str(),
srcFullPath.c_str());
-
- // add this to the list of objects for this local generator
- if(cmSystemTools::FileIsFullPath(objNoTargetDir.c_str()))
- {
- objNoTargetDir = cmSystemTools::GetFilenameName(objNoTargetDir);
- }
- cmLocalUnixMakefileGenerator3::LocalObjectInfo& info =
- this->LocalGenerator->LocalObjectFiles[objNoTargetDir];
- info.HasSourceExtension = hasSourceExtension;
- info.push_back(
- cmLocalUnixMakefileGenerator3::LocalObjectEntry(this->Target, lang)
- );
}
//----------------------------------------------------------------------------
@@ -1620,7 +1597,7 @@ void cmMakefileTargetGenerator
//----------------------------------------------------------------------------
void cmMakefileTargetGenerator
-::AppendLinkDepends(std::vector<std::string>& depends)
+::AppendObjectDepends(std::vector<std::string>& depends)
{
// Add dependencies on the compiled object files.
std::string relPath = this->LocalGenerator->GetHomeRelativeOutputPath();
@@ -1633,25 +1610,32 @@ void cmMakefileTargetGenerator
depends.push_back(objTarget);
}
- // Add dependencies on targets that must be built first.
- this->AppendTargetDepends(depends);
+ // Add dependencies on the external object files.
+ for(std::vector<std::string>::const_iterator obj
+ = this->ExternalObjects.begin();
+ obj != this->ExternalObjects.end(); ++obj)
+ {
+ depends.push_back(*obj);
+ }
// Add a dependency on the rule file itself.
this->LocalGenerator->AppendRuleDepend(depends,
this->BuildFileNameFull.c_str());
+}
- // Add a dependency on the link definitions file, if any.
- if(!this->ModuleDefinitionFile.empty())
- {
- depends.push_back(this->ModuleDefinitionFile);
- }
+//----------------------------------------------------------------------------
+void cmMakefileTargetGenerator
+::AppendLinkDepends(std::vector<std::string>& depends)
+{
+ this->AppendObjectDepends(depends);
- // Add dependencies on the external object files.
- for(std::vector<std::string>::const_iterator obj
- = this->ExternalObjects.begin();
- obj != this->ExternalObjects.end(); ++obj)
+ // Add dependencies on targets that must be built first.
+ this->AppendTargetDepends(depends);
+
+ // Add a dependency on the link definitions file, if any.
+ if(!this->GeneratorTarget->ModuleDefinitionFile.empty())
{
- depends.push_back(*obj);
+ depends.push_back(this->GeneratorTarget->ModuleDefinitionFile);
}
// Add user-specified dependencies.
@@ -1979,7 +1963,7 @@ void cmMakefileTargetGenerator::AddFortranFlags(std::string& flags)
//----------------------------------------------------------------------------
void cmMakefileTargetGenerator::AddModuleDefinitionFlag(std::string& flags)
{
- if(this->ModuleDefinitionFile.empty())
+ if(this->GeneratorTarget->ModuleDefinitionFile.empty())
{
return;
}
@@ -1996,7 +1980,7 @@ void cmMakefileTargetGenerator::AddModuleDefinitionFlag(std::string& flags)
// vs6's "cl -link" pass it to the linker.
std::string flag = defFileFlag;
flag += (this->LocalGenerator->ConvertToLinkReference(
- this->ModuleDefinitionFile.c_str()));
+ this->GeneratorTarget->ModuleDefinitionFile.c_str()));
this->LocalGenerator->AppendFlags(flags, flag.c_str());
}
diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h
index 8fba13f..e1e554b 100644
--- a/Source/cmMakefileTargetGenerator.h
+++ b/Source/cmMakefileTargetGenerator.h
@@ -17,6 +17,7 @@
class cmCustomCommand;
class cmDependInformation;
class cmDepends;
+class cmGeneratorTarget;
class cmGeneratedFileStream;
class cmGlobalUnixMakefileGenerator3;
class cmLocalUnixMakefileGenerator3;
@@ -117,6 +118,9 @@ protected:
// append intertarget dependencies
void AppendTargetDepends(std::vector<std::string>& depends);
+ // Append object file dependencies.
+ void AppendObjectDepends(std::vector<std::string>& depends);
+
// Append link rule dependencies (objects, etc.).
void AppendLinkDepends(std::vector<std::string>& depends);
@@ -157,6 +161,7 @@ protected:
void RemoveForbiddenFlags(const char* flagVar, const char* linkLang,
std::string& linkFlags);
cmTarget *Target;
+ cmGeneratorTarget* GeneratorTarget;
cmLocalUnixMakefileGenerator3 *LocalGenerator;
cmGlobalUnixMakefileGenerator3 *GlobalGenerator;
cmMakefile *Makefile;
@@ -198,9 +203,6 @@ protected:
std::vector<std::string> Objects;
std::vector<std::string> ExternalObjects;
- // The windows module definition source file (.def), if any.
- std::string ModuleDefinitionFile;
-
// Set of object file names that will be built in this directory.
std::set<cmStdString> ObjectFiles;
diff --git a/Source/cmMarkAsAdvancedCommand.h b/Source/cmMarkAsAdvancedCommand.h
index 26e0a07..3658dbb 100644
--- a/Source/cmMarkAsAdvancedCommand.h
+++ b/Source/cmMarkAsAdvancedCommand.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "mark_as_advanced";}
+ virtual const char* GetName() const {return "mark_as_advanced";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Mark cmake cached variables as advanced.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" mark_as_advanced([CLEAR|FORCE] VAR VAR2 VAR...)\n"
@@ -75,7 +75,7 @@ public:
* make many of the modules usable in cmake/ctest scripts, (among them
* FindUnixMake.cmake used by the CTEST_BUILD command.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
cmTypeMacro(cmMarkAsAdvancedCommand, cmCommand);
};
diff --git a/Source/cmMathCommand.h b/Source/cmMathCommand.h
index d31f34b..d622904 100644
--- a/Source/cmMathCommand.h
+++ b/Source/cmMathCommand.h
@@ -14,10 +14,7 @@
#include "cmCommand.h"
-/** \class cmMathCommand
- * \brief Common string operations
- *
- */
+/// Mathematical expressions: math(EXPR ...) command.
class cmMathCommand : public cmCommand
{
public:
@@ -39,17 +36,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "math";}
+ virtual const char* GetName() const { return "math";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Mathematical expressions.";
}
@@ -57,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" math(EXPR <output variable> <math expression>)\n"
diff --git a/Source/cmMessageCommand.h b/Source/cmMessageCommand.h
index 932ee77..03ab94b 100644
--- a/Source/cmMessageCommand.h
+++ b/Source/cmMessageCommand.h
@@ -39,17 +39,17 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "message";}
+ virtual const char* GetName() const { return "message";}
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Display a message to the user.";
}
@@ -57,7 +57,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR]\n"
diff --git a/Source/cmOptionCommand.h b/Source/cmOptionCommand.h
index fa5abd8..da31332 100644
--- a/Source/cmOptionCommand.h
+++ b/Source/cmOptionCommand.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "option";}
+ virtual const char* GetName() const {return "option";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Provides an option that the user can optionally select.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" option(<option_variable> \"help string describing option\"\n"
@@ -68,7 +68,7 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
cmTypeMacro(cmOptionCommand, cmCommand);
};
diff --git a/Source/cmOutputRequiredFilesCommand.h b/Source/cmOutputRequiredFilesCommand.h
index 6038472..85d9095 100644
--- a/Source/cmOutputRequiredFilesCommand.h
+++ b/Source/cmOutputRequiredFilesCommand.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "output_required_files";}
+ virtual const char* GetName() const { return "output_required_files";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Approximate C preprocessor dependency scanning.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"This command exists only because ancient CMake versions provided it. "
@@ -67,7 +67,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmPolicies.h b/Source/cmPolicies.h
index 2160f37..3106248 100644
--- a/Source/cmPolicies.h
+++ b/Source/cmPolicies.h
@@ -21,8 +21,9 @@ class cmPolicy;
/** \class cmPolicies
* \brief Handles changes in CMake behavior and policies
*
- * See the cmake wiki section on policies for an overview of this class's
- * purpose
+ * See the cmake wiki section on
+ * <a href="http://www.cmake.org/Wiki/CMake/Policies">policies</a>
+ * for an overview of this class's purpose
*/
class cmPolicies
{
@@ -30,32 +31,46 @@ public:
cmPolicies();
~cmPolicies();
- enum PolicyStatus { OLD, WARN, NEW, REQUIRED_IF_USED, REQUIRED_ALWAYS };
+ /// Status of a policy
+ enum PolicyStatus {
+ OLD, ///< Use old behavior
+ WARN, ///< Use old behavior but issue a warning
+ NEW, ///< Use new behavior
+ /// Issue an error if user doesn't set policy status to NEW and hits the
+ /// check
+ REQUIRED_IF_USED,
+ REQUIRED_ALWAYS ///< Issue an error unless user sets policy status to NEW.
+ };
static const char* PolicyStatusNames[];
+ /// Policy identifiers
enum PolicyID
{
- CMP0000, // Policy version specification
- CMP0001, // Ignore old compatibility variable
- CMP0002, // Target names must be unique
- CMP0003, // Linking does not include extra -L paths
- CMP0004, // Libraries linked may not have leading or trailing whitespace
- CMP0005, // Definition value escaping
- CMP0006, // BUNDLE install rules needed for MACOSX_BUNDLE targets
- CMP0007, // list command handling of empty elements
- CMP0008, // Full-path libraries must be a valid library file name
- CMP0009, // GLOB_RECURSE should not follow symlinks by default
- CMP0010, // Bad variable reference syntax is an error
- CMP0011, // Strong policy scope for include and find_package
- CMP0012, // Recognize numbers and boolean constants in if()
- CMP0013, // Duplicate binary directories not allowed
- CMP0014, // Input directories must have CMakeLists.txt
- CMP0015, // link_directories() treats paths relative to source dir
- CMP0016, // target_link_libraries() fails if only argument is not a target
- CMP0017, // Prefer files in CMAKE_ROOT when including from CMAKE_ROOT
-
- // Always the last entry. Useful mostly to avoid adding a comma
- // the last policy when adding a new one.
+ CMP0000, ///< Policy version specification
+ CMP0001, ///< Ignore old compatibility variable
+ CMP0002, ///< Target names must be unique
+ CMP0003, ///< Linking does not include extra -L paths
+ CMP0004, ///< Libraries linked may not have leading or trailing whitespace
+ CMP0005, ///< Definition value escaping
+ CMP0006, ///< BUNDLE install rules needed for MACOSX_BUNDLE targets
+ CMP0007, ///< list command handling of empty elements
+ CMP0008, ///< Full-path libraries must be a valid library file name
+ CMP0009, ///< GLOB_RECURSE should not follow symlinks by default
+ CMP0010, ///< Bad variable reference syntax is an error
+ CMP0011, ///< Strong policy scope for include and find_package
+ CMP0012, ///< Recognize numbers and boolean constants in if()
+ CMP0013, ///< Duplicate binary directories not allowed
+ CMP0014, ///< Input directories must have CMakeLists.txt
+ CMP0015, ///< link_directories() treats paths relative to source dir
+ /// target_link_libraries() fails if only argument is not a target
+ CMP0016,
+ CMP0017, ///< Prefer files in CMAKE_ROOT when including from CMAKE_ROOT
+
+ /** \brief Always the last entry.
+ *
+ * Useful mostly to avoid adding a comma the last policy when adding a new
+ * one.
+ */
CMPCOUNT
};
diff --git a/Source/cmProjectCommand.cxx b/Source/cmProjectCommand.cxx
index 6e3b6af..fcf0a49 100644
--- a/Source/cmProjectCommand.cxx
+++ b/Source/cmProjectCommand.cxx
@@ -77,6 +77,24 @@ bool cmProjectCommand
languages.push_back("CXX");
}
this->Makefile->EnableLanguage(languages, false);
+ std::string extraInclude = "CMAKE_PROJECT_" + args[0] + "_INCLUDE";
+ const char* include = this->Makefile->GetDefinition(extraInclude.c_str());
+ if(include)
+ {
+ std::string fullFilePath;
+ bool readit =
+ this->Makefile->ReadListFile( this->Makefile->GetCurrentListFile(),
+ include);
+ if(!readit && !cmSystemTools::GetFatalErrorOccured())
+ {
+ std::string m =
+ "could not find file:\n"
+ " ";
+ m += include;
+ this->SetError(m.c_str());
+ return false;
+ }
+ }
return true;
}
diff --git a/Source/cmProjectCommand.h b/Source/cmProjectCommand.h
index fc2b7a2..4b051af 100644
--- a/Source/cmProjectCommand.h
+++ b/Source/cmProjectCommand.h
@@ -43,12 +43,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "project";}
+ virtual const char* GetName() const {return "project";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set a name for the entire project.";
}
@@ -56,7 +56,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" project(<projectname> [languageName1 languageName2 ... ] )\n"
@@ -68,7 +68,10 @@ public:
"By default C and CXX are enabled. E.g. if you do not have a "
"C++ compiler, you can disable the check for it by explicitly listing "
"the languages you want to support, e.g. C. By using the special "
- "language \"NONE\" all checks for any language can be disabled.";
+ "language \"NONE\" all checks for any language can be disabled. "
+ "If a variable exists called CMAKE_PROJECT_<projectName>_INCLUDE_FILE, "
+ "the file pointed to by that variable will be included as the last step "
+ "of the project command.";
}
cmTypeMacro(cmProjectCommand, cmCommand);
diff --git a/Source/cmPropertyDefinition.h b/Source/cmPropertyDefinition.h
index f68db87..16bd148 100644
--- a/Source/cmPropertyDefinition.h
+++ b/Source/cmPropertyDefinition.h
@@ -14,45 +14,56 @@
#include "cmProperty.h"
-class cmPropertyDefinition
+/** \class cmPropertyDefinition
+ * \brief Property meta-information
+ *
+ * This class contains the following meta-information about property:
+ * - Name;
+ * - Various documentation strings;
+ * - The scope of the property;
+ * - If the property is chained.
+ */
+class cmPropertyDefinition
{
public:
- // Define this property
+ /// Define this property
void DefineProperty(const char *name, cmProperty::ScopeType scope,
const char *ShortDescription,
const char *FullDescription,
const char *DocumentationSection,
bool chained);
- // get the documentation string
+ /// Get the documentation string
cmDocumentationEntry GetDocumentation() const;
- // basic constructor
+ /// Default constructor
cmPropertyDefinition() { this->Chained = false; };
- // is it chained?
- bool IsChained() {return this->Chained; };
+ /// Is the property chained?
+ bool IsChained() const { return this->Chained; };
- // Get the section if any
+ /// Get the section if any
const std::string &GetDocumentationSection() const {
return this->DocumentationSection; };
-
- // get the scope
+
+ /// Get the scope
cmProperty::ScopeType GetScope() const {
return this->Scope; };
- // get the docs
+ /// Get the documentation (short version)
const std::string &GetShortDescription() const {
- return this->ShortDescription; };
+ return this->ShortDescription; };
+
+ /// Get the documentation (full version)
const std::string &GetFullDescription() const {
return this->FullDescription; };
-
+
protected:
std::string Name;
std::string ShortDescription;
std::string FullDescription;
std::string DocumentationSection;
- cmProperty::ScopeType Scope;
+ cmProperty::ScopeType Scope;
bool Chained;
};
diff --git a/Source/cmQTWrapCPPCommand.h b/Source/cmQTWrapCPPCommand.h
index f972e10..0184927 100644
--- a/Source/cmQTWrapCPPCommand.h
+++ b/Source/cmQTWrapCPPCommand.h
@@ -45,12 +45,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "qt_wrap_cpp";}
+ virtual const char* GetName() const { return "qt_wrap_cpp";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Create Qt Wrappers.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" qt_wrap_cpp(resultingLibraryName DestName\n"
diff --git a/Source/cmQTWrapUICommand.h b/Source/cmQTWrapUICommand.h
index 67e914f..744ae98 100644
--- a/Source/cmQTWrapUICommand.h
+++ b/Source/cmQTWrapUICommand.h
@@ -43,12 +43,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "qt_wrap_ui";}
+ virtual const char* GetName() const { return "qt_wrap_ui";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Create Qt user interfaces Wrappers.";
}
@@ -56,7 +56,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" qt_wrap_ui(resultingLibraryName HeadersDestName\n"
diff --git a/Source/cmRemoveCommand.h b/Source/cmRemoveCommand.h
index bae2ee1..c62d58f 100644
--- a/Source/cmRemoveCommand.h
+++ b/Source/cmRemoveCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "remove";}
+ virtual const char* GetName() const {return "remove";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the list(REMOVE_ITEM ) command instead.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" remove(VAR VALUE VALUE ...)\n"
@@ -68,7 +68,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmRemoveDefinitionsCommand.h b/Source/cmRemoveDefinitionsCommand.h
index 519bc42..f0e906d 100644
--- a/Source/cmRemoveDefinitionsCommand.h
+++ b/Source/cmRemoveDefinitionsCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "remove_definitions";}
+ virtual const char* GetName() const {return "remove_definitions";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Removes -D define flags added by add_definitions.";
}
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" remove_definitions(-DFOO -DBAR ...)\n"
diff --git a/Source/cmReturnCommand.h b/Source/cmReturnCommand.h
index 3739e83..690ab79 100644
--- a/Source/cmReturnCommand.h
+++ b/Source/cmReturnCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "return";}
+ virtual const char* GetName() const {return "return";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Return from a file, directory or function.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" return()\n"
diff --git a/Source/cmSeparateArgumentsCommand.h b/Source/cmSeparateArgumentsCommand.h
index 736f066..6a51a92 100644
--- a/Source/cmSeparateArgumentsCommand.h
+++ b/Source/cmSeparateArgumentsCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "separate_arguments";}
+ virtual const char* GetName() const {return "separate_arguments";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return
"Parse space-separated arguments into a semicolon-separated list.";
@@ -59,7 +59,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" separate_arguments(<var> <UNIX|WINDOWS>_COMMAND \"<args>\")\n"
diff --git a/Source/cmSetCommand.h b/Source/cmSetCommand.h
index 2990d24..66b129e 100644
--- a/Source/cmSetCommand.h
+++ b/Source/cmSetCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "set";}
+ virtual const char* GetName() const {return "set";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set a CMAKE variable to a given value.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" set(<variable> <value>\n"
diff --git a/Source/cmSetDirectoryPropertiesCommand.h b/Source/cmSetDirectoryPropertiesCommand.h
index 227571f..ee40158 100644
--- a/Source/cmSetDirectoryPropertiesCommand.h
+++ b/Source/cmSetDirectoryPropertiesCommand.h
@@ -32,17 +32,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "set_directory_properties";}
+ virtual const char* GetName() const { return "set_directory_properties";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set a property of the directory.";
}
@@ -58,7 +58,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" set_directory_properties(PROPERTIES prop1 value1 prop2 value2)\n"
diff --git a/Source/cmSetPropertyCommand.h b/Source/cmSetPropertyCommand.h
index 3a0169e..830299d 100644
--- a/Source/cmSetPropertyCommand.h
+++ b/Source/cmSetPropertyCommand.h
@@ -34,12 +34,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "set_property";}
+ virtual const char* GetName() const { return "set_property";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set a named property in a given scope.";
}
@@ -47,7 +47,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" set_property(<GLOBAL |\n"
@@ -86,7 +86,7 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
cmTypeMacro(cmSetPropertyCommand, cmCommand);
diff --git a/Source/cmSetSourceFilesPropertiesCommand.h b/Source/cmSetSourceFilesPropertiesCommand.h
index 392f168..2a67bc0 100644
--- a/Source/cmSetSourceFilesPropertiesCommand.h
+++ b/Source/cmSetSourceFilesPropertiesCommand.h
@@ -32,12 +32,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "set_source_files_properties";}
+ virtual const char* GetName() const { return "set_source_files_properties";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Source files can have properties that affect how they are built.";
}
@@ -45,7 +45,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" set_source_files_properties([file1 [file2 [...]]]\n"
diff --git a/Source/cmSetTargetPropertiesCommand.h b/Source/cmSetTargetPropertiesCommand.h
index f001a11..1bc429c 100644
--- a/Source/cmSetTargetPropertiesCommand.h
+++ b/Source/cmSetTargetPropertiesCommand.h
@@ -32,12 +32,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "set_target_properties";}
+ virtual const char* GetName() const { return "set_target_properties";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Targets can have properties that affect how they are built.";
}
@@ -52,7 +52,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" set_target_properties(target1 target2 ...\n"
diff --git a/Source/cmSetTestsPropertiesCommand.h b/Source/cmSetTestsPropertiesCommand.h
index fbc8ac1..10df17d 100644
--- a/Source/cmSetTestsPropertiesCommand.h
+++ b/Source/cmSetTestsPropertiesCommand.h
@@ -32,12 +32,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "set_tests_properties";}
+ virtual const char* GetName() const { return "set_tests_properties";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set a property of the tests.";
}
@@ -45,7 +45,7 @@ public:
/**
* Longer documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" set_tests_properties(test1 [test2...] PROPERTIES prop1 value1 prop2"
diff --git a/Source/cmSiteNameCommand.h b/Source/cmSiteNameCommand.h
index ac7f426..532710c 100644
--- a/Source/cmSiteNameCommand.h
+++ b/Source/cmSiteNameCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "site_name";}
+ virtual const char* GetName() const {return "site_name";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Set the given variable to the name of the computer.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" site_name(variable)\n";
diff --git a/Source/cmSourceGroup.cxx b/Source/cmSourceGroup.cxx
index 19ae8fc..2b34f2b 100644
--- a/Source/cmSourceGroup.cxx
+++ b/Source/cmSourceGroup.cxx
@@ -120,12 +120,6 @@ const std::vector<const cmSourceFile*>& cmSourceGroup::GetSourceFiles() const
}
//----------------------------------------------------------------------------
-std::vector<const cmSourceFile*>& cmSourceGroup::GetSourceFiles()
-{
- return this->SourceFiles;
-}
-
-//----------------------------------------------------------------------------
void cmSourceGroup::AddChild(cmSourceGroup child)
{
this->Internal->GroupChildren.push_back(child);
diff --git a/Source/cmSourceGroup.h b/Source/cmSourceGroup.h
index 71ccb51..641dcbd 100644
--- a/Source/cmSourceGroup.h
+++ b/Source/cmSourceGroup.h
@@ -100,7 +100,6 @@ public:
* source group.
*/
const std::vector<const cmSourceFile*>& GetSourceFiles() const;
- std::vector<const cmSourceFile*>& GetSourceFiles();
std::vector<cmSourceGroup> const& GetGroupChildren() const;
private:
diff --git a/Source/cmSourceGroupCommand.h b/Source/cmSourceGroupCommand.h
index 31508ce..6a29fc8 100644
--- a/Source/cmSourceGroupCommand.h
+++ b/Source/cmSourceGroupCommand.h
@@ -41,12 +41,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "source_group";}
+ virtual const char* GetName() const {return "source_group";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Define a grouping for sources in the makefile.";
}
@@ -54,7 +54,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" source_group(name [REGULAR_EXPRESSION regex] "
diff --git a/Source/cmStringCommand.h b/Source/cmStringCommand.h
index 452f4a1..3e585a5 100644
--- a/Source/cmStringCommand.h
+++ b/Source/cmStringCommand.h
@@ -45,17 +45,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "string";}
+ virtual const char* GetName() const { return "string";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "String operations.";
}
@@ -63,7 +63,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" string(REGEX MATCH <regular_expression>\n"
diff --git a/Source/cmSubdirCommand.h b/Source/cmSubdirCommand.h
index 3dad67d..eedbfff 100644
--- a/Source/cmSubdirCommand.h
+++ b/Source/cmSubdirCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "subdirs";}
+ virtual const char* GetName() const { return "subdirs";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the add_subdirectory() command instead.";
}
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"Add a list of subdirectories to the build.\n"
@@ -79,7 +79,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmSubdirDependsCommand.h b/Source/cmSubdirDependsCommand.h
index 347f97a..daf97cd 100644
--- a/Source/cmSubdirDependsCommand.h
+++ b/Source/cmSubdirDependsCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "subdir_depends";}
+ virtual const char* GetName() const { return "subdir_depends";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Does nothing.";
}
@@ -55,7 +55,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" subdir_depends(subdir dep1 dep2 ...)\n"
@@ -64,7 +64,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index e618bee..9e86681 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -37,18 +37,14 @@ const char* cmTarget::GetTargetTypeName(TargetType targetType)
return "MODULE_LIBRARY";
case cmTarget::SHARED_LIBRARY:
return "SHARED_LIBRARY";
+ case cmTarget::OBJECT_LIBRARY:
+ return "OBJECT_LIBRARY";
case cmTarget::EXECUTABLE:
return "EXECUTABLE";
case cmTarget::UTILITY:
return "UTILITY";
case cmTarget::GLOBAL_TARGET:
return "GLOBAL_TARGET";
- case cmTarget::INSTALL_FILES:
- return "INSTALL_FILES";
- case cmTarget::INSTALL_PROGRAMS:
- return "INSTALL_PROGRAMS";
- case cmTarget::INSTALL_DIRECTORY:
- return "INSTALL_DIRECTORY";
case cmTarget::UNKNOWN_LIBRARY:
return "UNKNOWN_LIBRARY";
}
@@ -887,7 +883,9 @@ void cmTarget::DefineProperties(cmake *cm)
"of of just main()."
"This makes it a GUI executable instead of a console application. "
"See the CMAKE_MFC_FLAG variable documentation to configure use "
- "of MFC for WinMain executables.");
+ "of MFC for WinMain executables. "
+ "This property is initialized by the value of the variable "
+ "CMAKE_WIN32_EXECUTABLE if it is set when a target is created.");
cm->DefineProperty
("MACOSX_BUNDLE", cmProperty::TARGET,
@@ -897,7 +895,9 @@ void cmTarget::DefineProperties(cmake *cm)
"This makes it a GUI executable that can be launched from "
"the Finder. "
"See the MACOSX_BUNDLE_INFO_PLIST target property for information "
- "about creation of the Info.plist file for the application bundle.");
+ "about creation of the Info.plist file for the application bundle. "
+ "This property is initialized by the value of the variable "
+ "CMAKE_MACOSX_BUNDLE if it is set when a target is created.");
cm->DefineProperty
("MACOSX_BUNDLE_INFO_PLIST", cmProperty::TARGET,
@@ -1103,17 +1103,6 @@ void cmTarget::DefineProperties(cmake *cm)
"better if VS_GLOBAL_QtVersion is set to the version "
"FindQt4.cmake found. For example, \"4.7.3\"");
-#if 0
- cm->DefineProperty
- ("OBJECT_FILES", cmProperty::TARGET,
- "Used to get the resulting list of object files that make up a "
- "target.",
- "This can be used to put object files from one library "
- "into another library. It is a read only property. It "
- "converts the source list for the target into a list of full "
- "paths to object names that will be produced by the target.");
-#endif
-
#define CM_TARGET_FILE_TYPES_DOC \
"There are three kinds of target files that may be built: " \
"archive, library, and runtime. " \
@@ -1204,16 +1193,6 @@ void cmTarget::DefineProperties(cmake *cm)
void cmTarget::SetType(TargetType type, const char* name)
{
this->Name = name;
- if(type == cmTarget::INSTALL_FILES ||
- type == cmTarget::INSTALL_PROGRAMS ||
- type == cmTarget::INSTALL_DIRECTORY)
- {
- this->Makefile->
- IssueMessage(cmake::INTERNAL_ERROR,
- "SetType called on cmTarget for INSTALL_FILES, "
- "INSTALL_PROGRAMS, or INSTALL_DIRECTORY ");
- return;
- }
// only add dependency information for library targets
this->TargetTypeValue = type;
if(this->TargetTypeValue >= STATIC_LIBRARY
@@ -1260,6 +1239,8 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->SetPropertyDefault("AUTOMOC", 0);
this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", 0);
this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0);
+ this->SetPropertyDefault("WIN32_EXECUTABLE", 0);
+ this->SetPropertyDefault("MACOSX_BUNDLE", 0);
// Collect the set of configuration types.
std::vector<std::string> configNames;
@@ -2623,54 +2604,6 @@ const char *cmTarget::GetProperty(const char* prop)
}
//----------------------------------------------------------------------------
-void cmTarget::ComputeObjectFiles()
-{
- if (this->IsImported())
- {
- return;
- }
-#if 0
- std::vector<std::string> dirs;
- this->Makefile->GetLocalGenerator()->
- GetTargetObjectFileDirectories(this,
- dirs);
- std::string objectFiles;
- std::string objExtensionLookup1 = "CMAKE_";
- std::string objExtensionLookup2 = "_OUTPUT_EXTENSION";
-
- for(std::vector<std::string>::iterator d = dirs.begin();
- d != dirs.end(); ++d)
- {
- for(std::vector<cmSourceFile*>::iterator s = this->SourceFiles.begin();
- s != this->SourceFiles.end(); ++s)
- {
- cmSourceFile* sf = *s;
- if(const char* lang = sf->GetLanguage())
- {
- std::string lookupObj = objExtensionLookup1 + lang;
- lookupObj += objExtensionLookup2;
- const char* obj = this->Makefile->GetDefinition(lookupObj.c_str());
- if(obj)
- {
- if(objectFiles.size())
- {
- objectFiles += ";";
- }
- std::string objFile = *d;
- objFile += "/";
- objFile += this->Makefile->GetLocalGenerator()->
- GetSourceObjectName(*sf);
- objFile += obj;
- objectFiles += objFile;
- }
- }
- }
- }
- this->SetProperty("OBJECT_FILES", objectFiles.c_str());
-#endif
-}
-
-//----------------------------------------------------------------------------
const char *cmTarget::GetProperty(const char* prop,
cmProperty::ScopeType scope)
{
@@ -3627,7 +3560,8 @@ bool cmTarget::HaveBuildTreeRPATH()
bool cmTarget::HaveInstallTreeRPATH()
{
const char* install_rpath = this->GetProperty("INSTALL_RPATH");
- return install_rpath && *install_rpath;
+ return (install_rpath && *install_rpath) &&
+ !this->Makefile->IsOn("CMAKE_SKIP_INSTALL_RPATH");
}
//----------------------------------------------------------------------------
@@ -3734,7 +3668,8 @@ std::string cmTarget::GetInstallNameDirForInstallTree(const char* config,
{
std::string dir;
- if(!this->Makefile->IsOn("CMAKE_SKIP_RPATH"))
+ if(!this->Makefile->IsOn("CMAKE_SKIP_RPATH") &&
+ !this->Makefile->IsOn("CMAKE_SKIP_INSTALL_RPATH"))
{
const char* install_name_dir = this->GetProperty("INSTALL_NAME_DIR");
if(install_name_dir && *install_name_dir)
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index dfed499..e2502f0 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -59,8 +59,8 @@ class cmTarget
public:
cmTarget();
enum TargetType { EXECUTABLE, STATIC_LIBRARY,
- SHARED_LIBRARY, MODULE_LIBRARY, UTILITY, GLOBAL_TARGET,
- INSTALL_FILES, INSTALL_PROGRAMS, INSTALL_DIRECTORY,
+ SHARED_LIBRARY, MODULE_LIBRARY,
+ OBJECT_LIBRARY, UTILITY, GLOBAL_TARGET,
UNKNOWN_LIBRARY};
static const char* GetTargetTypeName(TargetType targetType);
enum CustomCommandType { PRE_BUILD, PRE_LINK, POST_BUILD };
@@ -404,9 +404,6 @@ public:
// Define the properties
static void DefineProperties(cmake *cm);
- // Compute the OBJECT_FILES property only when requested
- void ComputeObjectFiles();
-
/** Get the macro to define when building sources in this target.
If no macro should be defined null is returned. */
const char* GetExportMacro();
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLinkLibrariesCommand.cxx
index 36c4ca8..dbea1c3 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -84,6 +84,16 @@ bool cmTargetLinkLibrariesCommand
return true;
}
+ if(this->Target->GetType() == cmTarget::OBJECT_LIBRARY)
+ {
+ cmOStringStream e;
+ e << "Object library target \"" << args[0] << "\" "
+ << "may not link to anything.";
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
+ cmSystemTools::SetFatalErrorOccured();
+ return true;
+ }
+
// but we might not have any libs after variable expansion
if(args.size() < 2)
{
diff --git a/Source/cmTargetLinkLibrariesCommand.h b/Source/cmTargetLinkLibrariesCommand.h
index 8df4ac0..be866c3 100644
--- a/Source/cmTargetLinkLibrariesCommand.h
+++ b/Source/cmTargetLinkLibrariesCommand.h
@@ -42,12 +42,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "target_link_libraries";}
+ virtual const char* GetName() const { return "target_link_libraries";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return
"Link a target to given libraries.";
@@ -56,7 +56,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" target_link_libraries(<target> [item1 [item2 [...]]]\n"
diff --git a/Source/cmTryCompileCommand.h b/Source/cmTryCompileCommand.h
index 0d57633..68ec666 100644
--- a/Source/cmTryCompileCommand.h
+++ b/Source/cmTryCompileCommand.h
@@ -40,19 +40,19 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "try_compile";}
+ virtual const char* GetName() const { return "try_compile";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Try building some code.";
}
/**
* More documentation. */
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" try_compile(RESULT_VAR <bindir> <srcdir>\n"
diff --git a/Source/cmTryRunCommand.h b/Source/cmTryRunCommand.h
index f86d863..06a9118 100644
--- a/Source/cmTryRunCommand.h
+++ b/Source/cmTryRunCommand.h
@@ -40,12 +40,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "try_run";}
+ virtual const char* GetName() const { return "try_run";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Try compiling and then running some code.";
}
@@ -53,7 +53,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR\n"
diff --git a/Source/cmUnsetCommand.h b/Source/cmUnsetCommand.h
index 28f8cf4..9cf95d9 100644
--- a/Source/cmUnsetCommand.h
+++ b/Source/cmUnsetCommand.h
@@ -40,17 +40,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() {return "unset";}
+ virtual const char* GetName() const {return "unset";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Unset a variable, cache variable, or environment variable.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" unset(<variable> [CACHE])\n"
diff --git a/Source/cmUseMangledMesaCommand.h b/Source/cmUseMangledMesaCommand.h
index fec2265..2f52960 100644
--- a/Source/cmUseMangledMesaCommand.h
+++ b/Source/cmUseMangledMesaCommand.h
@@ -45,12 +45,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "use_mangled_mesa";}
+ virtual const char* GetName() const { return "use_mangled_mesa";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Copy mesa headers for use in combination with system GL.";
}
@@ -58,7 +58,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" use_mangled_mesa(PATH_TO_MESA OUTPUT_DIRECTORY)\n"
@@ -71,10 +71,10 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmUtilitySourceCommand.h b/Source/cmUtilitySourceCommand.h
index 6c23814..32afdda 100644
--- a/Source/cmUtilitySourceCommand.h
+++ b/Source/cmUtilitySourceCommand.h
@@ -44,12 +44,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "utility_source";}
+ virtual const char* GetName() const { return "utility_source";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Specify the source tree of a third-party utility.";
}
@@ -57,7 +57,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" utility_source(cache_entry executable_name\n"
@@ -76,7 +76,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmVariableRequiresCommand.h b/Source/cmVariableRequiresCommand.h
index f165f39..91c351e 100644
--- a/Source/cmVariableRequiresCommand.h
+++ b/Source/cmVariableRequiresCommand.h
@@ -39,12 +39,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "variable_requires";}
+ virtual const char* GetName() const { return "variable_requires";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the if() command instead.";
}
@@ -52,7 +52,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
"Assert satisfaction of an option's required variables.\n"
@@ -70,7 +70,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmVariableWatchCommand.h b/Source/cmVariableWatchCommand.h
index e2fb934..cb80736 100644
--- a/Source/cmVariableWatchCommand.h
+++ b/Source/cmVariableWatchCommand.h
@@ -49,7 +49,7 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/** This command does not really have a final pass but it needs to
stay alive since it owns variable watch callback information. */
@@ -58,12 +58,12 @@ public:
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "variable_watch";}
+ virtual const char* GetName() const { return "variable_watch";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Watch the CMake variable for change.";
}
@@ -71,7 +71,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" variable_watch(<variable name> [<command to execute>])\n"
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index f9148a1..db37dfc 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -11,6 +11,7 @@
============================================================================*/
#include "cmVisualStudio10TargetGenerator.h"
#include "cmGlobalVisualStudio10Generator.h"
+#include "cmGeneratorTarget.h"
#include "cmTarget.h"
#include "cmComputeLinkInformation.h"
#include "cmGeneratedFileStream.h"
@@ -62,6 +63,7 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
{
this->GlobalGenerator = gg;
this->Target = target;
+ this->GeneratorTarget = gg->GetGeneratorTarget(target);
this->Makefile = target->GetMakefile();
this->LocalGenerator =
(cmLocalVisualStudio7Generator*)
@@ -70,7 +72,6 @@ cmVisualStudio10TargetGenerator(cmTarget* target,
this->GlobalGenerator->CreateGUID(this->Name.c_str());
this->GUID = this->GlobalGenerator->GetGUID(this->Name.c_str());
this->Platform = gg->GetPlatformName();
- this->ComputeObjectNames();
this->BuildFileStream = 0;
}
@@ -147,7 +148,7 @@ void cmVisualStudio10TargetGenerator::Generate()
this->Target->SetProperty("GENERATOR_FILE_NAME",this->Name.c_str());
this->Target->SetProperty("GENERATOR_FILE_NAME_EXT",
".vcxproj");
- if(this->Target->GetType() <= cmTarget::MODULE_LIBRARY)
+ if(this->Target->GetType() <= cmTarget::OBJECT_LIBRARY)
{
if(!this->ComputeClOptions())
{
@@ -358,6 +359,7 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
case cmTarget::MODULE_LIBRARY:
configType += "DynamicLibrary";
break;
+ case cmTarget::OBJECT_LIBRARY:
case cmTarget::STATIC_LIBRARY:
configType += "StaticLibrary";
break;
@@ -388,12 +390,17 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
mfcLine += useOfMfcValue + "</UseOfMfc>\n";
this->WriteString(mfcLine.c_str(), 2);
- if(this->Target->GetType() <= cmTarget::MODULE_LIBRARY &&
+ if(this->Target->GetType() <= cmTarget::OBJECT_LIBRARY &&
this->ClOptions[*i]->UsingUnicode() ||
this->Target->GetPropertyAsBool("VS_WINRT_EXTENSIONS"))
{
this->WriteString("<CharacterSet>Unicode</CharacterSet>\n", 2);
}
+ else if (this->Target->GetType() <= cmTarget::MODULE_LIBRARY &&
+ this->ClOptions[*i]->UsingSBCS())
+ {
+ this->WriteString("<CharacterSet>NotSet</CharacterSet>\n", 2);
+ }
else
{
this->WriteString("<CharacterSet>MultiByte</CharacterSet>\n", 2);
@@ -416,12 +423,11 @@ void cmVisualStudio10TargetGenerator::WriteProjectConfigurationValues()
void cmVisualStudio10TargetGenerator::WriteCustomCommands()
{
this->SourcesVisited.clear();
- std::vector<cmSourceFile*> const& sources = this->Target->GetSourceFiles();
- for(std::vector<cmSourceFile*>::const_iterator source = sources.begin();
- source != sources.end(); ++source)
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = this->GeneratorTarget->CustomCommands.begin();
+ si != this->GeneratorTarget->CustomCommands.end(); ++si)
{
- cmSourceFile* sf = *source;
- this->WriteCustomCommand(sf);
+ this->WriteCustomCommand(*si);
}
}
@@ -870,47 +876,17 @@ void cmVisualStudio10TargetGenerator::WriteCLSources()
this->WriteString("</ItemGroup>\n", 1);
}
-void cmVisualStudio10TargetGenerator::ComputeObjectNames()
-{
- // We may be modifying the source groups temporarily, so make a copy.
- std::vector<cmSourceGroup> sourceGroups = this->Makefile->GetSourceGroups();
-
- // get the classes from the source lists then add them to the groups
- std::vector<cmSourceFile*>const & classes = this->Target->GetSourceFiles();
- for(std::vector<cmSourceFile*>::const_iterator i = classes.begin();
- i != classes.end(); i++)
- {
- // Add the file to the list of sources.
- std::string source = (*i)->GetFullPath();
- if(cmSystemTools::UpperCase((*i)->GetExtension()) == "DEF")
- {
- this->ModuleDefinitionFile = (*i)->GetFullPath();
- }
- cmSourceGroup& sourceGroup =
- this->Makefile->FindSourceGroup(source.c_str(), sourceGroups);
- sourceGroup.AssignSource(*i);
- }
-
- // Compute which sources need unique object computation.
- this->LocalGenerator->ComputeObjectNameRequirements(sourceGroups);
-}
-
bool cmVisualStudio10TargetGenerator::OutputSourceSpecificFlags(
cmSourceFile* source)
{
cmSourceFile& sf = *source;
cmLocalVisualStudio7Generator* lg = this->LocalGenerator;
- // Compute the maximum length full path to the intermediate
- // files directory for any configuration. This is used to construct
- // object file names that do not produce paths that are too long.
- std::string dir_max;
- lg->ComputeMaxDirectoryLength(dir_max, *this->Target);
-
std::string objectName;
- if(lg->NeedObjectName.find(&sf) != lg->NeedObjectName.end())
+ if(this->GeneratorTarget->ExplicitObjectName.find(&sf)
+ != this->GeneratorTarget->ExplicitObjectName.end())
{
- objectName = lg->GetObjectFileNameWithoutTarget(sf, dir_max);
+ objectName = this->GeneratorTarget->Objects[&sf];
}
std::string flags;
std::string defines;
@@ -1031,20 +1007,29 @@ void cmVisualStudio10TargetGenerator::WritePathAndIncrementalLinkOptions()
}
else
{
- std::string targetNameFull =
- this->Target->GetFullName(config->c_str());
std::string intermediateDir = this->LocalGenerator->
GetTargetDirectory(*this->Target);
intermediateDir += "/";
intermediateDir += *config;
intermediateDir += "/";
+ std::string outDir;
+ std::string targetNameFull;
+ if(ttype == cmTarget::OBJECT_LIBRARY)
+ {
+ outDir = intermediateDir;
+ targetNameFull = this->Target->GetName();
+ targetNameFull += ".lib";
+ }
+ else
+ {
+ outDir = this->Target->GetDirectory(config->c_str()) + "/";
+ targetNameFull = this->Target->GetFullName(config->c_str());
+ }
this->ConvertToWindowsSlash(intermediateDir);
- std::string outDir = this->Target->GetDirectory(config->c_str());
this->ConvertToWindowsSlash(outDir);
this->WritePlatformConfigTag("OutDir", config->c_str(), 3);
*this->BuildFileStream << outDir
- << "\\"
<< "</OutDir>\n";
this->WritePlatformConfigTag("IntDir", config->c_str(), 3);
@@ -1278,11 +1263,15 @@ void cmVisualStudio10TargetGenerator::WriteClOptions(
*this->BuildFileStream << configName
<< "</AssemblerListingLocation>\n";
this->WriteString("<ObjectFileName>$(IntDir)</ObjectFileName>\n", 3);
- this->WriteString("<ProgramDataBaseFileName>", 3);
- *this->BuildFileStream << this->Target->GetDirectory(configName.c_str())
- << "/"
- << this->Target->GetPDBName(configName.c_str())
- << "</ProgramDataBaseFileName>\n";
+ if(this->Target->GetType() != cmTarget::OBJECT_LIBRARY)
+ {
+ // TODO: PDB for object library?
+ this->WriteString("<ProgramDataBaseFileName>", 3);
+ *this->BuildFileStream << this->Target->GetDirectory(configName.c_str())
+ << "/"
+ << this->Target->GetPDBName(configName.c_str())
+ << "</ProgramDataBaseFileName>\n";
+ }
this->WriteString("</ClCompile>\n", 2);
}
@@ -1514,10 +1503,10 @@ void cmVisualStudio10TargetGenerator::WriteLinkOptions(std::string const&
linkOptions.AddFlag("ImportLibrary", imLib.c_str());
linkOptions.AddFlag("ProgramDataBaseFile", pdb.c_str());
linkOptions.Parse(flags.c_str());
- if(!this->ModuleDefinitionFile.empty())
+ if(!this->GeneratorTarget->ModuleDefinitionFile.empty())
{
linkOptions.AddFlag("ModuleDefinitionFile",
- this->ModuleDefinitionFile.c_str());
+ this->GeneratorTarget->ModuleDefinitionFile.c_str());
}
linkOptions.RemoveFlag("GenerateManifest");
@@ -1593,7 +1582,7 @@ void cmVisualStudio10TargetGenerator::WriteItemDefinitionGroups()
this->WritePlatformConfigTag("ItemDefinitionGroup", i->c_str(), 1);
*this->BuildFileStream << "\n";
// output cl compile flags <ClCompile></ClCompile>
- if(this->Target->GetType() <= cmTarget::MODULE_LIBRARY)
+ if(this->Target->GetType() <= cmTarget::OBJECT_LIBRARY)
{
this->WriteClOptions(*i, includes);
// output rc compile flags <ResourceCompile></ResourceCompile>
diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h
index 90035f2..64fb124 100644
--- a/Source/cmVisualStudio10TargetGenerator.h
+++ b/Source/cmVisualStudio10TargetGenerator.h
@@ -15,6 +15,7 @@
class cmTarget;
class cmMakefile;
+class cmGeneratorTarget;
class cmGeneratedFileStream;
class cmGlobalVisualStudio10Generator;
class cmSourceFile;
@@ -75,7 +76,6 @@ private:
void WriteEvents(std::string const& configName);
void WriteEvent(const char* name, std::vector<cmCustomCommand> & commands,
std::string const& configName);
- void ComputeObjectNames();
void WriteGroupSources(const char* name,
std::vector<cmSourceFile*> const& sources,
std::vector<cmSourceGroup>& );
@@ -87,9 +87,9 @@ private:
typedef cmVisualStudioGeneratorOptions Options;
typedef std::map<cmStdString, Options*> OptionsMap;
OptionsMap ClOptions;
- std::string ModuleDefinitionFile;
std::string PathToVcxproj;
cmTarget* Target;
+ cmGeneratorTarget* GeneratorTarget;
cmMakefile* Makefile;
std::string Platform;
std::string GUID;
diff --git a/Source/cmVisualStudioGeneratorOptions.cxx b/Source/cmVisualStudioGeneratorOptions.cxx
index 41230e7..9369af6 100644
--- a/Source/cmVisualStudioGeneratorOptions.cxx
+++ b/Source/cmVisualStudioGeneratorOptions.cxx
@@ -117,6 +117,20 @@ bool cmVisualStudioGeneratorOptions::UsingUnicode()
}
return false;
}
+//----------------------------------------------------------------------------
+bool cmVisualStudioGeneratorOptions::UsingSBCS()
+{
+ // Look for the a _SBCS definition.
+ for(std::vector<std::string>::const_iterator di = this->Defines.begin();
+ di != this->Defines.end(); ++di)
+ {
+ if(*di == "_SBCS")
+ {
+ return true;
+ }
+ }
+ return false;
+}
//----------------------------------------------------------------------------
void cmVisualStudioGeneratorOptions::Parse(const char* flags)
diff --git a/Source/cmVisualStudioGeneratorOptions.h b/Source/cmVisualStudioGeneratorOptions.h
index 51a1362..a1a55da 100644
--- a/Source/cmVisualStudioGeneratorOptions.h
+++ b/Source/cmVisualStudioGeneratorOptions.h
@@ -48,6 +48,7 @@ public:
// Check for specific options.
bool UsingUnicode();
+ bool UsingSBCS();
bool IsDebug();
// Write options to output.
diff --git a/Source/cmWhileCommand.h b/Source/cmWhileCommand.h
index 04649a3..e111ae4 100644
--- a/Source/cmWhileCommand.h
+++ b/Source/cmWhileCommand.h
@@ -16,11 +16,6 @@
#include "cmFunctionBlocker.h"
#include "cmListFileCache.h"
-/** \class cmWhileFunctionBlocker
- * \brief subclass of function blocker
- *
- *
- */
class cmWhileFunctionBlocker : public cmFunctionBlocker
{
public:
@@ -37,11 +32,7 @@ private:
int Depth;
};
-/** \class cmWhileCommand
- * \brief starts a while loop
- *
- * cmWhileCommand starts a while loop
- */
+/// \brief Starts a while loop
class cmWhileCommand : public cmCommand
{
public:
@@ -70,17 +61,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "while";}
+ virtual const char* GetName() const { return "while";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Evaluate a group of commands while a condition is true";
}
@@ -88,7 +79,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" while(condition)\n"
diff --git a/Source/cmWriteFileCommand.h b/Source/cmWriteFileCommand.h
index 97ec727..8808d32 100644
--- a/Source/cmWriteFileCommand.h
+++ b/Source/cmWriteFileCommand.h
@@ -39,17 +39,17 @@ public:
/**
* This determines if the command is invoked when in script mode.
*/
- virtual bool IsScriptable() { return true; }
+ virtual bool IsScriptable() const { return true; }
/**
* The name of the command as specified in CMakeList.txt.
*/
- virtual const char* GetName() { return "write_file";}
+ virtual const char* GetName() const { return "write_file";}
/**
* Succinct documentation.
*/
- virtual const char* GetTerseDocumentation()
+ virtual const char* GetTerseDocumentation() const
{
return "Deprecated. Use the file(WRITE ) command instead.";
}
@@ -57,7 +57,7 @@ public:
/**
* More documentation.
*/
- virtual const char* GetFullDocumentation()
+ virtual const char* GetFullDocumentation() const
{
return
" write_file(filename \"message to write\"... [APPEND])\n"
@@ -73,7 +73,7 @@ public:
}
/** This command is kept for compatibility with older CMake versions. */
- virtual bool IsDiscouraged()
+ virtual bool IsDiscouraged() const
{
return true;
}
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index c5e6d44..846aef5 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -135,7 +135,7 @@ void cmNeedBackwardsCompatibility(const std::string& variable,
" that has not been defined. Some variables were always defined "
"by CMake in versions prior to 1.6. To fix this you might need to set "
"the cache value of CMAKE_BACKWARDS_COMPATIBILITY to 1.4 or less. If "
- "you are writing a CMakeList file, (or have already set "
+ "you are writing a CMakeLists file, (or have already set "
"CMAKE_BACKWARDS_COMPATABILITY to 1.4 or less) then you probably need "
"to include a CMake module to test for the feature this variable "
"defines.";
@@ -1433,7 +1433,7 @@ int cmake::ExecuteCMakeCommand(std::vector<std::string>& args)
// Command to start progress for a build
else if (args[1] == "cmake_progress_start" && args.size() == 4)
{
- // bascially remove the directory
+ // basically remove the directory
std::string dirName = args[2];
dirName += "/Progress";
cmSystemTools::RemoveADirectory(dirName.c_str());
@@ -1930,7 +1930,7 @@ void cmake::SetGlobalGenerator(cmGlobalGenerator *gg)
{
delete this->GlobalGenerator;
// restore the original environment variables CXX and CC
- // Restor CC
+ // Restore CC
std::string env = "CC=";
if(this->CCEnvironment.size())
{
@@ -2612,7 +2612,7 @@ int cmake::LoadCache()
// could we not read the cache
if (!this->CacheManager->LoadCache(this->GetHomeOutputDirectory()))
{
- // if it does exist, but isn;t readable then warn the user
+ // if it does exist, but isn't readable then warn the user
std::string cacheFile = this->GetHomeOutputDirectory();
cacheFile += "/CMakeCache.txt";
if(cmSystemTools::FileExists(cacheFile.c_str()))
@@ -3373,19 +3373,21 @@ void cmake::DefineProperties(cmake *cm)
cm->DefineProperty
("ENABLED_FEATURES", cmProperty::GLOBAL,
"List of features which are enabled during the CMake run.",
- "List of features which are enabled during the CMake run. Be default "
+ "List of features which are enabled during the CMake run. By default "
"it contains the names of all packages which were found. This is "
"determined using the <NAME>_FOUND variables. Packages which are "
"searched QUIET are not listed. A project can add its own features to "
- "this list.This property is used by the macros in FeatureSummary.cmake.");
+ "this list. "
+ "This property is used by the macros in FeatureSummary.cmake.");
cm->DefineProperty
("DISABLED_FEATURES", cmProperty::GLOBAL,
"List of features which are disabled during the CMake run.",
- "List of features which are disabled during the CMake run. Be default "
+ "List of features which are disabled during the CMake run. By default "
"it contains the names of all packages which were not found. This is "
"determined using the <NAME>_FOUND variables. Packages which are "
"searched QUIET are not listed. A project can add its own features to "
- "this list.This property is used by the macros in FeatureSummary.cmake.");
+ "this list. "
+ "This property is used by the macros in FeatureSummary.cmake.");
cm->DefineProperty
("PACKAGES_FOUND", cmProperty::GLOBAL,
"List of packages which were found during the CMake run.",
diff --git a/Source/cmake.h b/Source/cmake.h
index 31b1bb7..161e656 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -9,28 +9,6 @@
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the License for more information.
============================================================================*/
-// This class represents a cmake invocation. It is the top level class when
-// running cmake. Most cmake based GUIS should primarily create an instance
-// of this class and communicate with it.
-//
-// The basic process for a GUI is as follows:
-//
-// 1) Create a cmake instance
-// 2) Set the Home & Start directories, generator, and cmake command. this
-// can be done using the Set methods or by using SetArgs and passing in
-// command line arguments.
-// 3) Load the cache by calling LoadCache (duh)
-// 4) if you are using command line arguments with -D or -C flags then
-// call SetCacheArgs (or if for some other reason you want to modify the
-// cache, do it now.
-// 5) Finally call Configure
-// 6) Let the user change values and go back to step 5
-// 7) call Generate
-//
-// If your GUI allows the user to change the start & home directories then
-// you must at a minimum redo steps 2 through 7.
-//
-
#ifndef cmake_h
#define cmake_h
@@ -53,6 +31,30 @@ class cmListFileBacktrace;
class cmTarget;
class cmGeneratedFileStream;
+/** \brief Represents a cmake invocation.
+ *
+ * This class represents a cmake invocation. It is the top level class when
+ * running cmake. Most cmake based GUIS should primarily create an instance
+ * of this class and communicate with it.
+ *
+ * The basic process for a GUI is as follows:
+ *
+ * -# Create a cmake instance
+ * -# Set the Home & Start directories, generator, and cmake command. this
+ * can be done using the Set methods or by using SetArgs and passing in
+ * command line arguments.
+ * -# Load the cache by calling LoadCache (duh)
+ * -# if you are using command line arguments with -D or -C flags then
+ * call SetCacheArgs (or if for some other reason you want to modify the
+ * cache), do it now.
+ * -# Finally call Configure
+ * -# Let the user change values and go back to step 5
+ * -# call Generate
+
+ * If your GUI allows the user to change the start & home directories then
+ * you must at a minimum redo steps 2 through 7.
+ */
+
class cmake
{
public:
@@ -66,31 +68,33 @@ class cmake
};
- /** Describes the working modes of cmake.
- * NORMAL_MODE: cmake runs to create project files
- * SCRIPT_MODE: in script mode there is no generator and no cache. Also,
- * language are not enabled, so add_executable and things do
- * not do anything. Started by using -P
- * FIND_PACKAGE_MODE: cmake runs in pkg-config like mode, i.e. it just
- * searches for a package and prints the results to stdout.
- * This is similar to SCRIPT_MODE, but commands like
- * add_library() work too, since they may be used e.g. in
- * exported target files. Started via --find-package
- */
+ /** \brief Describes the working modes of cmake */
enum WorkingMode
{
- NORMAL_MODE,
+ NORMAL_MODE, ///< Cmake runs to create project files
+ /** \brief Script mode (started by using -P).
+ *
+ * In script mode there is no generator and no cache. Also,
+ * languages are not enabled, so add_executable and things do
+ * nothing.
+ */
SCRIPT_MODE,
+ /** \brief A pkg-config like mode
+ *
+ * In this mode cmake just searches for a package and prints the results to
+ * stdout. This is similar to SCRIPT_MODE, but commands like add_library()
+ * work too, since they may be used e.g. in exported target files. Started
+ * via --find-package.
+ */
FIND_PACKAGE_MODE
};
typedef std::map<cmStdString, cmCommand*> RegisteredCommandsMap;
- ///! construct an instance of cmake
+ /// Default constructor
cmake();
- ///! destruct an instance of cmake
+ /// Destructor
~cmake();
- ///! construct an instance of cmake
static const char *GetCMakeFilesDirectory() {return "/CMakeFiles";};
static const char *GetCMakeFilesDirectoryPostSlash() {
return "CMakeFiles/";};
@@ -164,12 +168,6 @@ class cmake
int Configure();
int ActualConfigure();
- /**
- * Configure the cmMakefiles. This routine will create a GlobalGenerator if
- * one has not already been set. It will then Call Configure on the
- * GlobalGenerator. This in turn will read in an process all the CMakeList
- * files for the tree. It will not produce any actual Makefiles, or
- * workspaces. Generate does that. */
int LoadCache();
void PreLoadCMakeFiles();
diff --git a/Source/cmakexbuild.cxx b/Source/cmakexbuild.cxx
index 89d0ec5..8eaae47 100644
--- a/Source/cmakexbuild.cxx
+++ b/Source/cmakexbuild.cxx
@@ -15,7 +15,7 @@
// This is a wrapper program for xcodebuild
// it calls xcodebuild, and does two things
-// it removes much of the output, all the setevn
+// it removes much of the output, all the setenv
// stuff. Also, it checks for the text file busy
// error, and re-runs xcodebuild until that error does
// not show up.
diff --git a/Source/kwsys/kwsysDateStamp.cmake b/Source/kwsys/kwsysDateStamp.cmake
index baf15ad..b00f782 100644
--- a/Source/kwsys/kwsysDateStamp.cmake
+++ b/Source/kwsys/kwsysDateStamp.cmake
@@ -15,7 +15,7 @@
SET(KWSYS_DATE_STAMP_YEAR 2012)
# KWSys version date month component. Format is MM.
-SET(KWSYS_DATE_STAMP_MONTH 02)
+SET(KWSYS_DATE_STAMP_MONTH 03)
# KWSys version date day component. Format is DD.
-SET(KWSYS_DATE_STAMP_DAY 22)
+SET(KWSYS_DATE_STAMP_DAY 09)
diff --git a/Templates/CPackConfig.cmake.in b/Templates/CPackConfig.cmake.in
index 7150feb..79b8d93 100644
--- a/Templates/CPackConfig.cmake.in
+++ b/Templates/CPackConfig.cmake.in
@@ -1,29 +1,12 @@
# This file will be configured to contain variables for CPack. These variables
# should be set in the CMake list file of the project before CPack module is
-# included. Example variables are:
-# CPACK_GENERATOR - Generator used to create package
-# CPACK_INSTALL_CMAKE_PROJECTS - For each project (path, name, component)
-# CPACK_CMAKE_GENERATOR - CMake Generator used for the projects
-# CPACK_INSTALL_COMMANDS - Extra commands to install components
-# CPACK_INSTALLED_DIRECTORIES - Extra directories to install
-# CPACK_PACKAGE_DESCRIPTION_FILE - Description file for the package
-# CPACK_PACKAGE_DESCRIPTION_SUMMARY - Summary of the package
-# CPACK_PACKAGE_EXECUTABLES - List of pairs of executables and labels
-# CPACK_PACKAGE_FILE_NAME - Name of the package generated
-# CPACK_PACKAGE_ICON - Icon used for the package
-# CPACK_PACKAGE_INSTALL_DIRECTORY - Name of directory for the installer
-# CPACK_PACKAGE_NAME - Package project name
-# CPACK_PACKAGE_VENDOR - Package project vendor
-# CPACK_PACKAGE_VERSION - Package project version
-# CPACK_PACKAGE_VERSION_MAJOR - Package project version (major)
-# CPACK_PACKAGE_VERSION_MINOR - Package project version (minor)
-# CPACK_PACKAGE_VERSION_PATCH - Package project version (patch)
-
-# There are certain generator specific ones
-
-# NSIS Generator:
-# CPACK_PACKAGE_INSTALL_REGISTRY_KEY - Name of the registry key for the installer
-# CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS - Extra commands used during uninstall
-# CPACK_NSIS_EXTRA_INSTALL_COMMANDS - Extra commands used during install
+# included. The list of available CPACK_xxx variables and their associated
+# documentation may be obtained using
+# cpack --help-variable-list
+#
+# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME)
+# and some are specific to a generator
+# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables
+# usually begin with CPACK_<GENNAME>_xxxx.
@_CPACK_OTHER_VARIABLES_@
diff --git a/Tests/CMakeCommands/build_command/RunCMake.cmake b/Tests/CMakeCommands/build_command/RunCMake.cmake
deleted file mode 100644
index 55d9359..0000000
--- a/Tests/CMakeCommands/build_command/RunCMake.cmake
+++ /dev/null
@@ -1,86 +0,0 @@
-if(NOT DEFINED CMake_SOURCE_DIR)
- message(FATAL_ERROR "CMake_SOURCE_DIR not defined")
-endif()
-
-if(NOT DEFINED dir)
- message(FATAL_ERROR "dir not defined")
-endif()
-
-if(NOT DEFINED gen)
- message(FATAL_ERROR "gen not defined")
-endif()
-
-message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
-
-# Run cmake:
-#
-function(run_cmake build_dir extra_args expected_result expected_output expected_error)
- message(STATUS "run_cmake build_dir='${build_dir}' extra_args='${extra_args}'")
-
- # Ensure build_dir exists:
- #
- execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${build_dir})
-
- # Run cmake:
- #
- execute_process(COMMAND ${CMAKE_COMMAND}
- ${extra_args}
- -G ${gen} ${CMake_SOURCE_DIR}/Tests/CMakeCommands/build_command
- RESULT_VARIABLE result
- OUTPUT_VARIABLE stdout
- ERROR_VARIABLE stderr
- WORKING_DIRECTORY ${build_dir}
- )
-
- message(STATUS "result='${result}'")
- message(STATUS "stdout='${stdout}'")
- message(STATUS "stderr='${stderr}'")
- message(STATUS "")
-
- # Verify result and output match expectations:
- #
- if("0" STREQUAL "${expected_result}")
- if(NOT "${result}" STREQUAL "0")
- message(FATAL_ERROR
- "error: result='${result}' is non-zero and different than expected_result='${expected_result}'")
- endif()
- else()
- if("${result}" STREQUAL "0")
- message(FATAL_ERROR
- "error: result='${result}' is zero and different than expected_result='${expected_result}'")
- endif()
- endif()
-
- foreach(e ${expected_output})
- if(NOT stdout MATCHES "${e}")
- message(FATAL_ERROR
- "error: stdout does not match expected_output item e='${e}'")
- else()
- message(STATUS "info: stdout matches '${e}'")
- endif()
- endforeach()
-
- foreach(e ${expected_error})
- if(NOT stderr MATCHES "${e}")
- message(FATAL_ERROR
- "error: stderr does not match expected_error item e='${e}'")
- else()
- message(STATUS "info: stderr matches '${e}'")
- endif()
- endforeach()
-
- message(STATUS "result, stdout and stderr match all expectations: test passes")
- message(STATUS "")
-endfunction()
-
-
-# Expect this case to succeed:
-run_cmake("${dir}/b1" "" 0
- "Build files have been written to:"
- "skipping cases 1, 2 and 3 because TEST_ERROR_CONDITIONS is OFF")
-
-
-# Expect this one to fail:
-run_cmake("${dir}/b2" "-DTEST_ERROR_CONDITIONS:BOOL=ON" 1
- "Configuring incomplete, errors occurred!"
- "build_command requires at least one argument naming a CMake variable;build_command unknown argument ")
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 8925633..5f125a4 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -16,6 +16,11 @@ MACRO(ADD_TEST_MACRO NAME COMMAND)
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/${dir}")
ENDMACRO(ADD_TEST_MACRO)
+MACRO(REGEX_ESCAPE_STRING _OUT _IN)
+ # Escape special regex metacharacters with a backslash
+ string(REGEX REPLACE "([$^.[|*+?()]|])" "\\\\\\1" ${_OUT} "${_IN}")
+ENDMACRO(REGEX_ESCAPE_STRING _OUT _IN)
+
INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/CheckFortran.cmake)
# Fake a user home directory to avoid polluting the real one.
@@ -48,6 +53,7 @@ IF(BUILD_TESTING)
ADD_SUBDIRECTORY(CMakeLib)
ADD_SUBDIRECTORY(CMakeOnly)
+ ADD_SUBDIRECTORY(RunCMake)
ADD_SUBDIRECTORY(FindPackageModeMakefileTest)
@@ -227,12 +233,35 @@ IF(BUILD_TESTING)
LIST(APPEND TEST_BUILD_DIRS ${CMake_TEST_INSTALL_PREFIX})
+ IF(NOT QT4_FOUND)
+ FIND_PACKAGE(Qt4)
+ ENDIF(NOT QT4_FOUND)
+
+ IF(QT4_FOUND)
+ # test whether the Qt4 which has been found works, on some machines
+ # which run nightly builds there were errors like "wrong file format"
+ # for libQtCore.so. So first check it works, and only if it does add
+ # the automoc test.
+ INCLUDE(CheckCXXSourceCompiles)
+ SET(_save_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
+ SET(_save_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
+
+ SET(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES})
+ SET(CMAKE_REQUIRED_LIBRARIES ${QT_QTCORE_LIBRARIES})
+
+ CHECK_CXX_SOURCE_COMPILES("#include <QCoreApplication>\n int main() {return (qApp == 0 ? 0 : 1); }\n"
+ QT4_WORKS)
+
+ SET(CMAKE_REQUIRED_INCLUDES "${_save_CMAKE_REQUIRED_INCLUDES}")
+ SET(CMAKE_REQUIRED_LIBRARIES "${_save_CMAKE_REQUIRED_LIBRARIES}")
+ ENDIF()
# run test for BundleUtilities on supported platforms/compilers
if(MSVC OR
CMAKE_SYSTEM_NAME MATCHES "Linux" OR
CMAKE_SYSTEM_NAME MATCHES "Darwin")
if(NOT "${CMAKE_TEST_GENERATOR}" STREQUAL "Watcom WMake")
+
ADD_TEST(BundleUtilities ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/BundleUtilities"
@@ -242,6 +271,24 @@ IF(BUILD_TESTING)
--build-project BundleUtilities
)
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/BundleUtilities")
+
+ # run test for DeployQt4 on supported platforms/compilers (which depends on BundleUtilities)
+ # this test also depends on the existence of the standard qtiff plugin
+ if(QT4_WORKS AND QT_QTSQL_FOUND)
+ ADD_TEST(Qt4Deploy ${CMAKE_CTEST_COMMAND}
+ --build-and-test
+ "${CMake_SOURCE_DIR}/Tests/Qt4Deploy"
+ "${CMake_BINARY_DIR}/Tests/Qt4Deploy"
+ --build-generator ${CMAKE_TEST_GENERATOR}
+ --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
+ --build-project Qt4Deploy
+ --build-options
+ -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
+ -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
+ )
+ LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Qt4Deploy")
+ endif()
+
endif()
endif()
@@ -865,43 +912,20 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
)
LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/Environment")
- IF(NOT QT4_FOUND)
- FIND_PACKAGE(Qt4)
- ENDIF(NOT QT4_FOUND)
-
- IF(QT4_FOUND)
- # test whether the Qt4 which has been found works, on some machines
- # which run nightly builds there were errors like "wrong file format"
- # for libQtCore.so. So first check it works, and only if it does add
- # the automoc test.
- INCLUDE(CheckCXXSourceCompiles)
- SET(_save_CMAKE_REQUIRED_INCLUDES "${CMAKE_REQUIRED_INCLUDES}")
- SET(_save_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
-
- SET(CMAKE_REQUIRED_INCLUDES ${QT_INCLUDES})
- SET(CMAKE_REQUIRED_LIBRARIES ${QT_QTCORE_LIBRARIES})
-
- CHECK_CXX_SOURCE_COMPILES("#include <QCoreApplication>\n int main() {return (qApp == 0 ? 0 : 1); }\n"
- QT4_WORKS_FOR_AUTOMOC_TEST)
-
- SET(CMAKE_REQUIRED_INCLUDES "${_save_CMAKE_REQUIRED_INCLUDES}")
- SET(CMAKE_REQUIRED_LIBRARIES "${_save_CMAKE_REQUIRED_LIBRARIES}")
-
- IF(QT4_WORKS_FOR_AUTOMOC_TEST)
- ADD_TEST(QtAutomoc ${CMAKE_CTEST_COMMAND}
- --build-and-test
- "${CMake_SOURCE_DIR}/Tests/QtAutomoc"
- "${CMake_BINARY_DIR}/Tests/QtAutomoc"
- --build-generator ${CMAKE_TEST_GENERATOR}
- --build-project QtAutomoc
- --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
- --build-exe-dir "${CMake_BINARY_DIR}/Tests/QtAutomoc"
- --force-new-ctest-process
- --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
- --test-command ${CMAKE_CTEST_COMMAND} -V
- )
- LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomoc")
- ENDIF()
+ IF(QT4_WORKS AND QT_QTGUI_FOUND)
+ ADD_TEST(QtAutomoc ${CMAKE_CTEST_COMMAND}
+ --build-and-test
+ "${CMake_SOURCE_DIR}/Tests/QtAutomoc"
+ "${CMake_BINARY_DIR}/Tests/QtAutomoc"
+ --build-generator ${CMAKE_TEST_GENERATOR}
+ --build-project QtAutomoc
+ --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}
+ --build-exe-dir "${CMake_BINARY_DIR}/Tests/QtAutomoc"
+ --force-new-ctest-process
+ --build-options -DQT_QMAKE_EXECUTABLE:FILEPATH=${QT_QMAKE_EXECUTABLE}
+ --test-command ${CMAKE_CTEST_COMMAND} -V
+ )
+ LIST(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/QtAutomoc")
ENDIF()
ADD_TEST(ExternalProject ${CMAKE_CTEST_COMMAND}
@@ -1324,6 +1348,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
endif()
IF(${CMAKE_TEST_GENERATOR} MATCHES "Visual Studio")
+ IF(NOT MSVC60)
+ ADD_TEST_MACRO(SBCS SBCS)
+ ENDIF(NOT MSVC60)
+
ADD_TEST(VSExternalInclude ${CMAKE_CTEST_COMMAND}
--build-and-test
"${CMake_SOURCE_DIR}/Tests/VSExternalInclude"
@@ -1656,9 +1684,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
-S "${CMake_BINARY_DIR}/Tests/CTestTestConfigFileInBuildDir1/test1.cmake" -V
--output-log "${CMake_BINARY_DIR}/Tests/CTestTestConfigFileInBuildDir1/testOut1.log"
)
+ REGEX_ESCAPE_STRING(CTEST_TEST_ESCAPED_SOURCE_DIR "${CMake_SOURCE_DIR}")
SET_TESTS_PROPERTIES(CTestTestConfigFileInBuildDir1 PROPERTIES DEPENDS CTestTestNoBuild
PASS_REGULAR_EXPRESSION
- "Reading ctest configuration file: ${CMake_SOURCE_DIR}.Tests.CTestTestConfigFileInBuildDir.CTestConfig.cmake")
+ "Reading ctest configuration file: ${CTEST_TEST_ESCAPED_SOURCE_DIR}.Tests.CTestTestConfigFileInBuildDir.CTestConfig.cmake")
CONFIGURE_FILE(
"${CMake_SOURCE_DIR}/Tests/CTestTestConfigFileInBuildDir/test2.cmake.in"
@@ -1672,10 +1701,11 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
-S "${CMake_BINARY_DIR}/Tests/CTestTestConfigFileInBuildDir2/test2.cmake" -V
--output-log "${CMake_BINARY_DIR}/Tests/CTestTestConfigFileInBuildDir2/testOut2.log"
)
+ REGEX_ESCAPE_STRING(CTEST_TEST_ESCAPED_BINARY_DIR "${CMake_BINARY_DIR}")
SET_TESTS_PROPERTIES(CTestTestConfigFileInBuildDir2 PROPERTIES DEPENDS CTestTestNoBuild
REQUIRED_FILES ${CMake_BINARY_DIR}/Tests/CTestTestConfigFileInBuildDir2/CTestConfig.cmake
PASS_REGULAR_EXPRESSION
- "Reading ctest configuration file: ${CMake_BINARY_DIR}.Tests.CTestTestConfigFileInBuildDir2.CTestConfig.cmake")
+ "Reading ctest configuration file: ${CTEST_TEST_ESCAPED_BINARY_DIR}.Tests.CTestTestConfigFileInBuildDir2.CTestConfig.cmake")
# Use macro, not function so that build can still be driven by CMake 2.4.
# After 2.6 is required, this could be a function without the extra 'set'
@@ -1713,13 +1743,6 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
add_config_tests(Release)
add_config_tests(RelWithDebInfo)
- add_test(CMakeCommands.build_command ${CMAKE_CMAKE_COMMAND}
- -DCMake_SOURCE_DIR=${CMake_SOURCE_DIR}
- -Ddir=${CMake_BINARY_DIR}/Tests/CMakeCommands/build_command
- -Dgen=${CMAKE_TEST_GENERATOR}
- -P "${CMake_SOURCE_DIR}/Tests/CMakeCommands/build_command/RunCMake.cmake"
- )
-
ADD_TEST_MACRO(CMakeCommands.target_link_libraries target_link_libraries)
CONFIGURE_FILE(
diff --git a/Tests/CMakeOnly/AllFindModules/CMakeLists.txt b/Tests/CMakeOnly/AllFindModules/CMakeLists.txt
index 9257fcc..22b1b7b 100644
--- a/Tests/CMakeOnly/AllFindModules/CMakeLists.txt
+++ b/Tests/CMakeOnly/AllFindModules/CMakeLists.txt
@@ -45,25 +45,31 @@ if (NOT QT4_FOUND)
endforeach(FIND_MODULE)
endif (NOT QT4_FOUND)
-# If any of these modules reported that it was found a version number should have been
-# reported.
-set(VERSIONS_REQUIRED
- ALSA BISON BZIP2 CUPS CURL DOXYGEN EXPAT FLEX FREETYPE GETTEXT GIF GIT
- ImageMagick JASPER LibArchive LIBXML2 LIBXSLT PERL PKG_CONFIG PostgreSQL
- SWIG TIFF ZLIB)
-
-foreach(VTEST ${VERSIONS_REQUIRED})
- if (${VTEST}_FOUND)
- if (DEFINED ${VTEST}_VERSION_STRING)
- if (NOT ${VTEST}_VERSION_STRING MATCHES "^[0-9][0-9\\.]*[A-Za-z_]*[0-9\\.]*$")
- message(SEND_ERROR "${VTEST}_VERSION_STRING has unexpected content ${${VTEST}_VERSION_STRING}")
- endif()
- elseif (DEFINED ${VTEST}_VERSION)
- if (NOT ${VTEST}_VERSION MATCHES "^[0-9][0-9\\.]*[A-Za-z_]*[0-9\\.]*$")
- message(SEND_ERROR "${VTEST}_VERSION has unexpected content ${${VTEST}_VERSION}")
+macro(check_version_string MODULE_NAME VERSION_VAR)
+ if (${MODULE_NAME}_FOUND)
+ if (DEFINED ${VERSION_VAR})
+ if (NOT ${VERSION_VAR} MATCHES "^[0-9][0-9\\.]*[-A-Za-z_\\+]*[0-9\\.]*$")
+ message(SEND_ERROR "${VERSION_VAR} has unexpected content ${${VERSION_VAR}}")
endif()
else()
- message(SEND_ERROR "${VTEST}_FOUND is set but no version number is defined")
+ message(SEND_ERROR "${MODULE_NAME}_FOUND is set but no version number is defined")
endif()
- endif(${VTEST}_FOUND)
+ endif ()
+endmacro(check_version_string)
+
+# If any of these modules reported that it was found a version number should have been
+# reported.
+
+foreach(VTEST ALSA ARMADILLO BZIP2 CUPS CURL EXPAT FREETYPE GETTEXT GIT HSPELL
+ JASPER LIBXML2 LIBXSLT PERL PostgreSQL TIFF ZLIB)
+ check_version_string(${VTEST} ${VTEST}_VERSION_STRING)
endforeach(VTEST)
+
+foreach(VTEST BISON Boost CUDA DOXYGEN FLEX GIF GTK2 LibArchive OPENSCENEGRAPH
+ RUBY SWIG)
+ check_version_string(${VTEST} ${VTEST}_VERSION)
+endforeach(VTEST)
+
+check_version_string(PYTHONINTERP PYTHON_VERSION_STRING)
+check_version_string(SUBVERSION Subversion_VERSION_SVN)
+check_version_string(PKGCONFIG PKG_CONFIG_VERSION_STRING)
diff --git a/Tests/CMakeOnly/CMakeLists.txt b/Tests/CMakeOnly/CMakeLists.txt
index 4407efb..a1551ca 100644
--- a/Tests/CMakeOnly/CMakeLists.txt
+++ b/Tests/CMakeOnly/CMakeLists.txt
@@ -22,3 +22,9 @@ add_CMakeOnly_test(CheckLanguage)
add_CMakeOnly_test(AllFindModules)
add_CMakeOnly_test(TargetScope)
+
+add_test(CMakeOnly.ProjectInclude ${CMAKE_CMAKE_COMMAND}
+ -DTEST=ProjectInclude
+ -DCMAKE_ARGS=-DCMAKE_PROJECT_ProjectInclude_INCLUDE=${CMAKE_CURRENT_SOURCE_DIR}/ProjectInclude/include.cmake
+ -P ${CMAKE_CURRENT_BINARY_DIR}/Test.cmake
+ )
diff --git a/Tests/CMakeOnly/ProjectInclude/CMakeLists.txt b/Tests/CMakeOnly/ProjectInclude/CMakeLists.txt
new file mode 100644
index 0000000..a9abb4a
--- /dev/null
+++ b/Tests/CMakeOnly/ProjectInclude/CMakeLists.txt
@@ -0,0 +1,4 @@
+project(ProjectInclude)
+if(NOT AUTO_INCLUDE)
+ message(FATAL_ERROR "include file not found")
+endif()
diff --git a/Tests/CMakeOnly/ProjectInclude/include.cmake b/Tests/CMakeOnly/ProjectInclude/include.cmake
new file mode 100644
index 0000000..527ebe7
--- /dev/null
+++ b/Tests/CMakeOnly/ProjectInclude/include.cmake
@@ -0,0 +1 @@
+set(AUTO_INCLUDE TRUE)
diff --git a/Tests/CMakeOnly/Test.cmake.in b/Tests/CMakeOnly/Test.cmake.in
index aa2d093..42af068 100644
--- a/Tests/CMakeOnly/Test.cmake.in
+++ b/Tests/CMakeOnly/Test.cmake.in
@@ -3,7 +3,8 @@ set(binary_dir "@CMAKE_CURRENT_BINARY_DIR@/${TEST}-build")
file(REMOVE_RECURSE "${binary_dir}")
file(MAKE_DIRECTORY "${binary_dir}")
execute_process(
- COMMAND ${CMAKE_COMMAND} "${source_dir}" -G "@CMAKE_TEST_GENERATOR@"
+ COMMAND ${CMAKE_COMMAND} ${CMAKE_ARGS}
+ "${source_dir}" -G "@CMAKE_TEST_GENERATOR@"
WORKING_DIRECTORY "${binary_dir}"
RESULT_VARIABLE result
)
diff --git a/Tests/CMakeTests/CMakeLists.txt b/Tests/CMakeTests/CMakeLists.txt
index fc1426e..c42c490 100644
--- a/Tests/CMakeTests/CMakeLists.txt
+++ b/Tests/CMakeTests/CMakeLists.txt
@@ -22,6 +22,7 @@ AddCMakeTest(ConfigureFile "")
AddCMakeTest(SeparateArguments "")
AddCMakeTest(ImplicitLinkInfo "")
AddCMakeTest(ModuleNotices "")
+AddCMakeTest(GetProperty "")
AddCMakeTest(If "")
AddCMakeTest(String "")
AddCMakeTest(Math "")
@@ -29,6 +30,7 @@ AddCMakeTest(CMakeMinimumRequired "")
AddCMakeTest(CompilerIdVendor "")
AddCMakeTest(ProcessorCount "")
AddCMakeTest(PushCheckState "")
+AddCMakeTest(While "")
AddCMakeTest(FileDownload "")
set_property(TEST CMake.FileDownload PROPERTY
@@ -55,14 +57,13 @@ AddCMakeTest(GetPrerequisites "${GetPrerequisites_PreArgs}")
# suite. It detects if any changes have been made to the CMake source tree
# by any previous configure, build or test steps.
#
-if(do_cvs_tests OR GIT_EXECUTABLE)
+if(GIT_EXECUTABLE)
string(REPLACE "\\" "/" ENV_HOME "$ENV{HOME}")
set(CheckSourceTree_PreArgs
"-DCMake_BINARY_DIR:PATH=${CMake_BINARY_DIR}"
"-DCMake_SOURCE_DIR:PATH=${CMake_SOURCE_DIR}"
- "-DCVS_EXECUTABLE:STRING=${CVS_EXECUTABLE}"
"-DGIT_EXECUTABLE:STRING=${GIT_EXECUTABLE}"
"-DHOME:STRING=${ENV_HOME}"
)
AddCMakeTest(CheckSourceTree "${CheckSourceTree_PreArgs}")
-endif(do_cvs_tests OR GIT_EXECUTABLE)
+endif()
diff --git a/Tests/CMakeTests/CheckSourceTreeTest.cmake.in b/Tests/CMakeTests/CheckSourceTreeTest.cmake.in
index 73f8b01..59b2890 100644
--- a/Tests/CMakeTests/CheckSourceTreeTest.cmake.in
+++ b/Tests/CMakeTests/CheckSourceTreeTest.cmake.in
@@ -5,7 +5,6 @@ message("CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
message("")
message("CMake_BINARY_DIR='${CMake_BINARY_DIR}'")
message("CMake_SOURCE_DIR='${CMake_SOURCE_DIR}'")
-message("CVS_EXECUTABLE='${CVS_EXECUTABLE}'")
message("GIT_EXECUTABLE='${GIT_EXECUTABLE}'")
message("HOME='${HOME}'")
message("ENV{DASHBOARD_TEST_FROM_CTEST}='$ENV{DASHBOARD_TEST_FROM_CTEST}'")
@@ -43,7 +42,7 @@ message("in_source_build='${in_source_build}'")
message("")
-# If this does not appear to be a git or CVS checkout, just pass the test here
+# If this does not appear to be a git checkout, just pass the test here
# and now. (Do not let the test fail if it is run in a tree *exported* from a
# repository or unpacked from a .zip file source installer...)
#
@@ -52,29 +51,13 @@ if(EXISTS "${CMake_SOURCE_DIR}/.git")
set(is_git_checkout 1)
endif()
-set(is_cvs_checkout 0)
-if(EXISTS "${CMake_SOURCE_DIR}/CVS/Root")
- set(is_cvs_checkout 1)
-endif()
-
message("is_git_checkout='${is_git_checkout}'")
-message("is_cvs_checkout='${is_cvs_checkout}'")
message("")
-if(NOT is_cvs_checkout)
if(NOT is_git_checkout)
- message("source tree is neither git nor CVS checkout... test passes by early return...")
+ message("source tree is not a git checkout... test passes by early return...")
return()
endif()
-endif()
-
-if(is_cvs_checkout)
-if(is_git_checkout)
- message("warning: source tree has both git *and* CVS file system bits???")
- # should this condition be a FATAL_ERROR test failure...?
-endif()
-endif()
-
# This test looks for the following types of changes in the source tree:
#
@@ -83,51 +66,13 @@ set(conflicts 0)
set(modifications 0)
set(nonadditions 0)
-# ov == output variable... conditionally filled in by either cvs or git below:
+# ov == output variable... conditionally filled in by either git below:
#
set(cmd "")
set(ov "")
set(ev "")
set(rv "")
-
-if(is_cvs_checkout AND CVS_EXECUTABLE)
- # Check with "cvs -q -n up -dP" if there are any local modifications to the
- # CMake source tree:
- #
- message("=============================================================================")
- message("This is a cvs checkout, using cvs to verify source tree....")
- message("")
-
- execute_process(COMMAND ${CVS_EXECUTABLE} --version
- WORKING_DIRECTORY ${CMake_SOURCE_DIR}
- OUTPUT_VARIABLE version_output
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- message("=== output of 'cvs --version' ===")
- message("${version_output}")
- message("=== end output ===")
- message("")
-
- file(READ "${CMake_SOURCE_DIR}/CVS/Root" contents)
- message("=== content of CVS/Root ===")
- message("${contents}")
- message("=== end content ===")
- message("")
-
- file(READ "${CMake_SOURCE_DIR}/CVS/Repository" contents)
- message("=== content of CVS/Repository ===")
- message("${contents}")
- message("=== end content ===")
- message("")
-
- message("Copy/paste this command to reproduce:")
- message("cd \"${CMake_SOURCE_DIR}\" && \"${CVS_EXECUTABLE}\" -q -n up -dP")
- message("")
-
- set(cmd ${CVS_EXECUTABLE} -q -n up -dP)
-endif()
-
-
# If no GIT_EXECUTABLE, see if we can figure out which git was used
# for the ctest_update step on this dashboard...
#
@@ -268,8 +213,8 @@ endif()
if(cmd)
- # Use the HOME value passed in to the script for calling cvs/git so it can
- # find its .cvspass or user/global config settings...
+ # Use the HOME value passed in to the script for calling git so it can
+ # find its user/global config settings...
#
set(original_ENV_HOME "$ENV{HOME}")
set(ENV{HOME} "${HOME}")
@@ -322,28 +267,6 @@ if(NOT ov STREQUAL "")
endif()
if(consider)
- if(is_cvs_checkout)
- if(line MATCHES "^A ")
- message(" locally added file/directory detected...")
- set(additions 1)
- endif()
-
- if(line MATCHES "^C ")
- message(" conflict detected...")
- set(conflicts 1)
- endif()
-
- if(line MATCHES "^M ")
- message(" locally modified file detected...")
- set(modifications 1)
- endif()
-
- if(line MATCHES "^\\? ")
- message(" locally non-added file/directory detected...")
- set(nonadditions 1)
- endif()
- endif()
-
if(is_git_checkout)
if(line MATCHES "^#[ \t]*modified:")
message(" locally modified file detected...")
diff --git a/Tests/CMakeTests/GetProperty-Bad-Argument.cmake b/Tests/CMakeTests/GetProperty-Bad-Argument.cmake
new file mode 100644
index 0000000..382dabb
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Bad-Argument.cmake
@@ -0,0 +1 @@
+get_property(FOO GLOBAL PROPERTY FOO FOO)
diff --git a/Tests/CMakeTests/GetProperty-Bad-Directory.cmake b/Tests/CMakeTests/GetProperty-Bad-Directory.cmake
new file mode 100644
index 0000000..cdbfa80
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Bad-Directory.cmake
@@ -0,0 +1 @@
+get_property(FOO DIRECTORY NonExistentSubDir PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-Bad-Scope.cmake b/Tests/CMakeTests/GetProperty-Bad-Scope.cmake
new file mode 100644
index 0000000..ea8566b
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Bad-Scope.cmake
@@ -0,0 +1 @@
+get_property(FOO FOO FOO)
diff --git a/Tests/CMakeTests/GetProperty-Bad-Target.cmake b/Tests/CMakeTests/GetProperty-Bad-Target.cmake
new file mode 100644
index 0000000..9992dab
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Bad-Target.cmake
@@ -0,0 +1 @@
+get_property(FOO TARGET FOO PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-Bad-Test.cmake b/Tests/CMakeTests/GetProperty-Bad-Test.cmake
new file mode 100644
index 0000000..44bf3eb
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Bad-Test.cmake
@@ -0,0 +1 @@
+get_property(FOO TEST FOO PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-Doc-Properties.cmake b/Tests/CMakeTests/GetProperty-Doc-Properties.cmake
new file mode 100644
index 0000000..6c2c362
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Doc-Properties.cmake
@@ -0,0 +1,10 @@
+get_property(FOO_BRIEF GLOBAL PROPERTY FOO BRIEF_DOCS)
+get_property(FOO_FULL GLOBAL PROPERTY FOO FULL_DOCS)
+
+if (NOT FOO_BRIEF STREQUAL "NOTFOUND")
+ message(SEND_ERROR "property FOO has BRIEF_DOCS set to '${FOO_BRIEF}'")
+endif ()
+
+if (NOT FOO_FULL STREQUAL "NOTFOUND")
+ message(SEND_ERROR "property FOO has FULL_DOCS set to '${FOO_FULL}'")
+endif ()
diff --git a/Tests/CMakeTests/GetProperty-Global-Name.cmake b/Tests/CMakeTests/GetProperty-Global-Name.cmake
new file mode 100644
index 0000000..497700c
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Global-Name.cmake
@@ -0,0 +1 @@
+get_property(FOO GLOBAL FOO PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-Missing-Argument.cmake b/Tests/CMakeTests/GetProperty-Missing-Argument.cmake
new file mode 100644
index 0000000..f0d004d
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Missing-Argument.cmake
@@ -0,0 +1 @@
+get_property()
diff --git a/Tests/CMakeTests/GetProperty-No-Cache.cmake b/Tests/CMakeTests/GetProperty-No-Cache.cmake
new file mode 100644
index 0000000..9719fe7
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-No-Cache.cmake
@@ -0,0 +1 @@
+get_property(FOO CACHE PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-No-Property.cmake b/Tests/CMakeTests/GetProperty-No-Property.cmake
new file mode 100644
index 0000000..bee230d
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-No-Property.cmake
@@ -0,0 +1 @@
+get_property(FOO GLOBAL PROPERTY)
diff --git a/Tests/CMakeTests/GetProperty-No-Source.cmake b/Tests/CMakeTests/GetProperty-No-Source.cmake
new file mode 100644
index 0000000..89773c8
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-No-Source.cmake
@@ -0,0 +1 @@
+get_property(FOO SOURCE PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-No-Target.cmake b/Tests/CMakeTests/GetProperty-No-Target.cmake
new file mode 100644
index 0000000..8f1fa23
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-No-Target.cmake
@@ -0,0 +1 @@
+get_property(FOO TARGET PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-No-Test.cmake b/Tests/CMakeTests/GetProperty-No-Test.cmake
new file mode 100644
index 0000000..045bd56
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-No-Test.cmake
@@ -0,0 +1 @@
+get_property(FOO TEST PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetProperty-Variable-Name.cmake b/Tests/CMakeTests/GetProperty-Variable-Name.cmake
new file mode 100644
index 0000000..9190f80
--- /dev/null
+++ b/Tests/CMakeTests/GetProperty-Variable-Name.cmake
@@ -0,0 +1 @@
+get_property(FOO VARIABLE FOO PROPERTY FOO)
diff --git a/Tests/CMakeTests/GetPropertyTest.cmake.in b/Tests/CMakeTests/GetPropertyTest.cmake.in
new file mode 100644
index 0000000..ab96e5b
--- /dev/null
+++ b/Tests/CMakeTests/GetPropertyTest.cmake.in
@@ -0,0 +1,98 @@
+include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
+
+set(Missing-Argument-RESULT 1)
+set(Missing-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Missing-Argument.cmake:1 \\(get_property\\):.*get_property called with incorrect number of arguments.*")
+
+check_cmake_test(GetProperty
+ Missing-Argument
+)
+
+set(Bad-Scope-RESULT 1)
+set(Bad-Scope-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Scope.cmake:1 \\(get_property\\):.*get_property given invalid scope FOO\\..*")
+
+check_cmake_test(GetProperty
+ Bad-Scope
+)
+
+set(Bad-Argument-RESULT 1)
+set(Bad-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Argument.cmake:1 \\(get_property\\):.*get_property given invalid argument \"FOO\"\\..*")
+
+check_cmake_test(GetProperty
+ Bad-Argument
+)
+
+set(No-Property-RESULT 1)
+set(No-Property-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Property.cmake:1 \\(get_property\\):.*get_property not given a PROPERTY <name> argument\\..*")
+
+check_cmake_test(GetProperty
+ No-Property
+)
+
+set(Doc-Properties-RESULT 0)
+
+check_cmake_test(GetProperty
+ Doc-Properties
+)
+
+set(Global-Name-RESULT 1)
+set(Global-Name-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Global-Name.cmake:1 \\(get_property\\):.*get_property given name for GLOBAL scope\\..*")
+
+check_cmake_test(GetProperty
+ Global-Name
+)
+
+set(Bad-Directory-RESULT 1)
+set(Bad-Directory-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Directory.cmake:1 \\(get_property\\):.*get_property DIRECTORY scope provided but requested directory was not.*found\\..*")
+
+check_cmake_test(GetProperty
+ Bad-Directory
+)
+
+set(No-Target-RESULT 1)
+set(No-Target-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Target.cmake:1 \\(get_property\\):.*get_property not given name for TARGET scope\\..*")
+
+check_cmake_test(GetProperty
+ No-Target
+)
+
+set(Bad-Target-RESULT 1)
+set(Bad-Target-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Target.cmake:1 \\(get_property\\):.*get_property could not find TARGET FOO\\..*")
+
+check_cmake_test(GetProperty
+ Bad-Target
+)
+
+set(No-Source-RESULT 1)
+set(No-Source-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Source.cmake:1 \\(get_property\\):.*get_property not given name for SOURCE scope\\..*")
+
+check_cmake_test(GetProperty
+ No-Source
+)
+
+set(No-Test-RESULT 1)
+set(No-Test-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Test.cmake:1 \\(get_property\\):.*get_property not given name for TEST scope\\..*")
+
+check_cmake_test(GetProperty
+ No-Test
+)
+
+set(Bad-Test-RESULT 1)
+set(Bad-Test-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Bad-Test.cmake:1 \\(get_property\\):.*get_property given TEST name that does not exist: FOO.*")
+
+check_cmake_test(GetProperty
+ Bad-Test
+)
+
+set(Variable-Name-RESULT 1)
+set(Variable-Name-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-Variable-Name.cmake:1 \\(get_property\\):.*get_property given name for VARIABLE scope\\..*")
+
+check_cmake_test(GetProperty
+ Variable-Name
+)
+
+set(No-Cache-RESULT 1)
+set(No-Cache-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?GetProperty-No-Cache.cmake:1 \\(get_property\\):.*get_property not given name for CACHE scope\\..*")
+
+check_cmake_test(GetProperty
+ No-Cache
+)
diff --git a/Tests/CMakeTests/While-Endwhile-Alone-Args.cmake b/Tests/CMakeTests/While-Endwhile-Alone-Args.cmake
new file mode 100644
index 0000000..886d98c
--- /dev/null
+++ b/Tests/CMakeTests/While-Endwhile-Alone-Args.cmake
@@ -0,0 +1 @@
+endwhile(a)
diff --git a/Tests/CMakeTests/While-Endwhile-Alone.cmake b/Tests/CMakeTests/While-Endwhile-Alone.cmake
new file mode 100644
index 0000000..82c09a0
--- /dev/null
+++ b/Tests/CMakeTests/While-Endwhile-Alone.cmake
@@ -0,0 +1 @@
+endwhile()
diff --git a/Tests/CMakeTests/While-Endwhile-Mismatch.cmake b/Tests/CMakeTests/While-Endwhile-Mismatch.cmake
new file mode 100644
index 0000000..5c338d6
--- /dev/null
+++ b/Tests/CMakeTests/While-Endwhile-Mismatch.cmake
@@ -0,0 +1,2 @@
+while(a)
+endwhile(b)
diff --git a/Tests/CMakeTests/While-Missing-Argument.cmake b/Tests/CMakeTests/While-Missing-Argument.cmake
new file mode 100644
index 0000000..32eaa26
--- /dev/null
+++ b/Tests/CMakeTests/While-Missing-Argument.cmake
@@ -0,0 +1 @@
+while()
diff --git a/Tests/CMakeTests/While-Missing-Endwhile.cmake b/Tests/CMakeTests/While-Missing-Endwhile.cmake
new file mode 100644
index 0000000..1abaaaf
--- /dev/null
+++ b/Tests/CMakeTests/While-Missing-Endwhile.cmake
@@ -0,0 +1 @@
+while(a)
diff --git a/Tests/CMakeTests/WhileTest.cmake.in b/Tests/CMakeTests/WhileTest.cmake.in
new file mode 100644
index 0000000..4693f2d
--- /dev/null
+++ b/Tests/CMakeTests/WhileTest.cmake.in
@@ -0,0 +1,53 @@
+set(NUMBERS "")
+set(COUNT 0)
+
+while(COUNT LESS 200)
+ set(NUMBERS "${NUMBERS} ${COUNT}")
+ set(COUNT "2${COUNT}")
+
+ set(NCOUNT 3)
+ while(NCOUNT LESS 31)
+ set(NUMBERS "${NUMBERS} ${NCOUNT}")
+ set(NCOUNT "${NCOUNT}0")
+ endwhile()
+endwhile(COUNT LESS 200)
+
+if(NOT NUMBERS STREQUAL " 0 3 30 20 3 30")
+ message(SEND_ERROR "while loop nesting error, result: '${NUMBERS}'")
+endif()
+
+set(Missing-Argument-RESULT 1)
+set(Missing-Argument-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Argument.cmake:1 \\(while\\):.*while called with incorrect number of arguments.*")
+
+include("@CMAKE_CURRENT_SOURCE_DIR@/CheckCMakeTest.cmake")
+check_cmake_test(While
+ Missing-Argument
+)
+
+set(Missing-Endwhile-RESULT 1)
+set(Missing-Endwhile-STDERR ".*CMake Error in (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Endwhile.cmake:.*A logical block opening on the line.*(@CMAKE_CURRENT_SOURCE_DIR@/)?While-Missing-Endwhile.cmake:1 \\(while\\).*is not closed\\..*")
+
+check_cmake_test(While
+ Missing-Endwhile
+)
+
+set(Endwhile-Mismatch-RESULT 0)
+set(Endwhile-Mismatch-STDERR ".*CMake Warning \\(dev\\) in (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Mismatch.cmake:.*A logical block opening on the line.*(@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Mismatch.cmake:1 \\(while\\).*with mis-matching arguments\\..*")
+
+check_cmake_test(While
+ Endwhile-Mismatch
+)
+
+set(Endwhile-Alone-RESULT 1)
+set(Endwhile-Alone-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Alone.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\.\n.*$")
+
+check_cmake_test(While
+ Endwhile-Alone
+)
+
+set(Endwhile-Alone-Args-RESULT 1)
+set(Endwhile-Alone-Args-STDERR ".*CMake Error at (@CMAKE_CURRENT_SOURCE_DIR@/)?While-Endwhile-Alone-Args.cmake:1 \\(endwhile\\):.*An ENDWHILE command was found outside of a proper WHILE ENDWHILE.*structure\\. Or its arguments did not.*$")
+
+check_cmake_test(While
+ Endwhile-Alone-Args
+)
diff --git a/Tests/CTestUpdateCVS.cmake.in b/Tests/CTestUpdateCVS.cmake.in
index a04673e..f7f5db6 100644
--- a/Tests/CTestUpdateCVS.cmake.in
+++ b/Tests/CTestUpdateCVS.cmake.in
@@ -18,6 +18,19 @@ set(CVS "@CVS_EXECUTABLE@")
message(" cvs = ${CVS}")
set(REPO ${TOP}/repo)
+
+# The MSYS cvs tool interprets "c:/" as a "machine:" name for SSH.
+# Detect the MSYS cvs and convert the repo path to an MSYS path.
+if(WIN32)
+ if(EXISTS "${CVS}")
+ file(STRINGS "${CVS}" cvs_is_msys LIMIT_COUNT 1 REGEX "[Mm][Ss][Yy][Ss]")
+ if(cvs_is_msys)
+ message(" '${CVS}' is from MSYS (contains '${cvs_is_msys}')")
+ string(REGEX REPLACE "^([A-Za-z]):" "/\\1" REPO "${REPO}")
+ endif()
+ endif()
+endif()
+
set(CVSCMD ${CVS} -d${REPO})
# CVSNT requires an extra option to 'cvs init'.
diff --git a/Tests/CTestUpdateHG.cmake.in b/Tests/CTestUpdateHG.cmake.in
index 543ddd9..5a9daae 100644
--- a/Tests/CTestUpdateHG.cmake.in
+++ b/Tests/CTestUpdateHG.cmake.in
@@ -28,7 +28,7 @@ run_child(
WORKING_DIRECTORY ${TOP}/repo.hg
COMMAND ${HG} init
)
-set(REPO file://${TOP}/repo.hg)
+set(REPO file:///${TOP}/repo.hg)
#-----------------------------------------------------------------------------
# Import initial content into the repository.
diff --git a/Tests/ExternalProject/CMakeLists.txt b/Tests/ExternalProject/CMakeLists.txt
index ac70129..7a76261 100644
--- a/Tests/ExternalProject/CMakeLists.txt
+++ b/Tests/ExternalProject/CMakeLists.txt
@@ -280,6 +280,18 @@ if(do_cvs_tests)
set_property(TARGET ${proj}
PROPERTY FOLDER "SetupRepos/Local/Deeply/Nested/For/Testing")
+ # The MSYS cvs tool interprets "c:/" as a "machine:" name for SSH.
+ # Detect the MSYS cvs and convert the repo path to an MSYS path.
+ if(WIN32)
+ if(EXISTS "${CVS_EXECUTABLE}")
+ file(STRINGS "${CVS_EXECUTABLE}" cvs_is_msys LIMIT_COUNT 1 REGEX "[Mm][Ss][Yy][Ss]")
+ if(cvs_is_msys)
+ message(STATUS "'${CVS_EXECUTABLE}' is from MSYS (contains '${cvs_is_msys}')")
+ string(REGEX REPLACE "^([A-Za-z]):" "/\\1" local_cvs_repo "${local_cvs_repo}")
+ endif()
+ endif()
+ endif()
+
# CVS by date stamp:
#
set(proj TutorialStep1-CVS-20090626)
diff --git a/Tests/FindPackageTest/CMakeLists.txt b/Tests/FindPackageTest/CMakeLists.txt
index 9a4bdfe..a4f213b 100644
--- a/Tests/FindPackageTest/CMakeLists.txt
+++ b/Tests/FindPackageTest/CMakeLists.txt
@@ -305,13 +305,39 @@ STRING(REGEX REPLACE "-.*$" "" version ${CMAKE_VERSION})
FIND_PACKAGE(CMakeTestExportPackage 1.${version} EXACT REQUIRED)
#-----------------------------------------------------------------------------
-# Test write_basic_config_version_file().
+# Test configure_package_config_file().
-include(WriteBasicConfigVersionFile)
+include(CMakePackageConfigHelpers)
-write_basic_config_version_file(${CMAKE_CURRENT_BINARY_DIR}/Foo123ConfigVersion.cmake
- VERSION 1.2.3
- COMPATIBILITY AnyNewerVersion)
+set(INCLUDE_INSTALL_DIR include )
+set(SHARE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/share/" )
+set(CURRENT_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}" )
+
+configure_package_config_file(RelocatableConfig.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/RelocatableConfig.cmake"
+ INSTALL_DESTINATION "${CMAKE_INSTALL_PREFIX}"
+ PATH_VARS INCLUDE_INSTALL_DIR SHARE_INSTALL_DIR CURRENT_BUILD_DIR
+ )
+
+include("${CMAKE_CURRENT_BINARY_DIR}/RelocatableConfig.cmake")
+
+if(NOT "${RELOC_INCLUDE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/include")
+ message(SEND_ERROR "RELOC_INCLUDE_DIR set by configure_package_config_file() is set to \"${RELOC_INCLUDE_DIR}\" (expected \"${CMAKE_CURRENT_BINARY_DIR}/include\")")
+endif()
+
+if(NOT "${RELOC_SHARE_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}/share/")
+ message(SEND_ERROR "RELOC_SHARE_DIR set by configure_package_config_file() is set to \"${RELOC_SHARE_DIR}\" (expected \"${CMAKE_CURRENT_BINARY_DIR}/share/\")")
+endif()
+
+if(NOT "${RELOC_BUILD_DIR}" STREQUAL "${CMAKE_CURRENT_BINARY_DIR}")
+ message(SEND_ERROR "RELOC_BUILD_DIR set by configure_package_config_file() is set to \"${RELOC_BUILD_DIR}\" (expected \"${CMAKE_CURRENT_BINARY_DIR}\")")
+endif()
+
+#-----------------------------------------------------------------------------
+# Test write_basic_config_version_file().
+
+write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/Foo123ConfigVersion.cmake
+ VERSION 1.2.3
+ COMPATIBILITY AnyNewerVersion)
set(PACKAGE_FIND_VERSION 2.3.4)
include(${CMAKE_CURRENT_BINARY_DIR}/Foo123ConfigVersion.cmake)
@@ -345,6 +371,7 @@ endif()
#######################
+include(WriteBasicConfigVersionFile)
write_basic_config_version_file(${CMAKE_CURRENT_BINARY_DIR}/Boo123ConfigVersion.cmake
VERSION 1.2.3
diff --git a/Tests/FindPackageTest/RelocatableConfig.cmake.in b/Tests/FindPackageTest/RelocatableConfig.cmake.in
new file mode 100644
index 0000000..7a34b2f
--- /dev/null
+++ b/Tests/FindPackageTest/RelocatableConfig.cmake.in
@@ -0,0 +1,5 @@
+@PACKAGE_INIT@
+
+set(RELOC_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+set(RELOC_SHARE_DIR "@PACKAGE_SHARE_INSTALL_DIR@")
+set_and_check(RELOC_BUILD_DIR "@PACKAGE_CURRENT_BUILD_DIR@")
diff --git a/Tests/Qt4Deploy/CMakeLists.txt b/Tests/Qt4Deploy/CMakeLists.txt
new file mode 100644
index 0000000..646ea9f
--- /dev/null
+++ b/Tests/Qt4Deploy/CMakeLists.txt
@@ -0,0 +1,70 @@
+cmake_minimum_required(VERSION 2.8)
+
+project(Qt4Deploy)
+set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/install)
+
+find_package(Qt4 REQUIRED QtMain QtCore QtSql)
+include(${QT_USE_FILE})
+
+add_executable(testdeploy MACOSX_BUNDLE testdeploy.cpp)
+target_link_libraries(testdeploy ${QT_LIBRARIES})
+set_target_properties(testdeploy PROPERTIES INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}")
+
+if(CMAKE_CONFIGURATION_TYPES AND QT_QTCORE_LIBRARY_RELEASE AND QT_QTCORE_LIBRARY_DEBUG)
+ # note: installing debug Qt libraries from a Qt installation configured with
+ # -debug-and-release not yet supported (very low priority).
+ install(CODE "
+ if(\"\${CMAKE_INSTALL_CONFIG_NAME}\" MATCHES \"^([Dd][Ee][Bb][Uu][Gg])$\")
+ return()
+ endif()
+ ")
+endif()
+
+# install the Qt4 app with qsqlite plugin
+install(CODE "file(REMOVE_RECURSE \"${CMAKE_INSTALL_PREFIX}\")")
+install(TARGETS testdeploy DESTINATION .)
+include(../../Modules/DeployQt4.cmake)
+if(APPLE)
+ install_qt4_executable(testdeploy.app "qsqlite")
+elseif(WIN32)
+ install_qt4_executable(testdeploy.exe "qsqlite")
+else()
+ install_qt4_executable(testdeploy "qsqlite")
+endif()
+
+
+# test depends on standard qsqlite plugin
+if(QT_QSQLITE_PLUGIN_DEBUG OR QT_QSQLITE_PLUGIN_RELEASE)
+
+ # test the deployed Qt application
+ if(APPLE)
+ install(CODE "
+ message(STATUS \"executing: ${CMAKE_INSTALL_PREFIX}/testdeploy.app/Contents/MacOS/testdeploy\")
+ execute_process(COMMAND \"${CMAKE_INSTALL_PREFIX}/testdeploy.app/Contents/MacOS/testdeploy\"
+ RESULT_VARIABLE result)
+ if(NOT result STREQUAL \"0\")
+ message(FATAL_ERROR \"error running testdeploy app\")
+ endif()
+ ")
+ else()
+ install(CODE "
+ message(STATUS \"executing: ${CMAKE_INSTALL_PREFIX}/testdeploy\")
+ execute_process(COMMAND \"${CMAKE_INSTALL_PREFIX}/testdeploy\"
+ RESULT_VARIABLE result)
+ if(NOT result STREQUAL \"0\")
+ message(FATAL_ERROR \"error running testdeploy app\")
+ endif()
+ ")
+ endif()
+
+ # custom target to install and test the installation at build time
+ if(CMAKE_CONFIGURATION_TYPES)
+ set(install_config "-DCMAKE_INSTALL_CONFIG_NAME=${CMAKE_CFG_INTDIR}")
+ endif()
+
+ add_custom_target(testdeploy_test ALL
+ COMMAND ${CMAKE_COMMAND} ${install_config} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake
+ COMMENT "${CMAKE_COMMAND} ${install_config} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_install.cmake"
+ DEPENDS testdeploy)
+
+endif()
diff --git a/Tests/Qt4Deploy/testdeploy.cpp b/Tests/Qt4Deploy/testdeploy.cpp
new file mode 100644
index 0000000..8b9c8d6
--- /dev/null
+++ b/Tests/Qt4Deploy/testdeploy.cpp
@@ -0,0 +1,29 @@
+#include <QCoreApplication>
+#include <QSqlDatabase>
+#include <QLibraryInfo>
+#include <QDebug>
+#include <QStringList>
+
+int main(int argc, char** argv)
+{
+ QCoreApplication app(argc, argv);
+
+ qDebug() << "App path:" << app.applicationDirPath();
+ qDebug() << "Plugin path:" << QLibraryInfo::location(QLibraryInfo::PluginsPath);
+
+ bool foundSqlite = false;
+
+ qDebug() << "Supported Database Drivers:";
+ foreach(const QString &sqlDriver, QSqlDatabase::drivers())
+ {
+ qDebug() << " " << sqlDriver;
+ if(sqlDriver == "QSQLITE")
+ foundSqlite = true;
+ }
+
+ if(foundSqlite)
+ qDebug() << "Found sqlite support from plugin.";
+ else
+ qDebug() << "Could not find sqlite support from plugin.";
+ return foundSqlite ? 0 : 1;
+}
diff --git a/Tests/README b/Tests/README
index 9b0f5c1..8b2fda8 100644
--- a/Tests/README
+++ b/Tests/README
@@ -16,10 +16,15 @@ your test to the test runs.
This includes tests that will build something using try_compile() and friends,
but nothing that expects add_executable(), add_library(), or add_test() to run.
-If this matches your test you should put it into the Tests/CMakeOnly/ directory.
-Create a subdirectory named like your test and write the CMakeLists.txt you
-need into that subdirectory. Use the add_CMakeOnly_test() macro from
-Tests/CMakeOnly/CMakeLists.txt to add your test to the test runs.
+If the test configures the project only once and it must succeed then put it
+into the Tests/CMakeOnly/ directory. Create a subdirectory named like your
+test and write the CMakeLists.txt you need into that subdirectory. Use the
+add_CMakeOnly_test() macro from Tests/CMakeOnly/CMakeLists.txt to add your
+test to the test runs.
+
+If the test configures the project with multiple variations and verifies
+success or failure each time then put it into the Tests/RunCMake/ directory.
+Read the instructions in Tests/RunCMake/CMakeLists.txt to add a test.
3. If you are testing something from the Modules directory
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
new file mode 100644
index 0000000..63fc9f8
--- /dev/null
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -0,0 +1,44 @@
+# This directory contains tests that run CMake to configure a project
+# but do not actually build anything. To add a test:
+#
+# 1.) Add a subdirectory named for the test.
+#
+# 2.) Call add_RunCMake_test and pass the test directory name.
+#
+# 3.) Create a RunCMakeTest.cmake script in the directory containing
+# include(RunCMake)
+# run_cmake(SubTest1)
+# ...
+# run_cmake(SubTestN)
+# where SubTest1..SubTestN are sub-test names each corresponding to
+# an independent CMake run and project configuration.
+#
+# 3.) Create a CMakeLists.txt file in the directory containing
+# cmake_minimum_required(...)
+# project(${RunCMake_TEST} NONE) # or languages needed
+# include(${RunCMake_TEST}.cmake)
+# where "${RunCMake_TEST}" is literal. A value for RunCMake_TEST
+# will be passed to CMake by the run_cmake macro when running each
+# sub-test.
+#
+# 4.) Create a <SubTest>.cmake file for each sub-test named above
+# containing the actual test code. Optionally create files
+# containing expected test results:
+# <SubTest>-result.txt = Process result expected if not "0"
+# <SubTest>-stdout.txt = Regex matching expected stdout content
+# <SubTest>-stderr.txt = Regex matching expected stderr content
+# Note that trailing newlines will be stripped from actual test
+# output before matching against the stdout and stderr expressions.
+
+macro(add_RunCMake_test test)
+ add_test(RunCMake.${test} ${CMAKE_CMAKE_COMMAND}
+ -DCMAKE_MODULE_PATH=${CMAKE_CURRENT_SOURCE_DIR}
+ -DRunCMake_GENERATOR=${CMAKE_TEST_GENERATOR}
+ -DRunCMake_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}/${test}
+ -DRunCMake_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}/${test}
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/${test}/RunCMakeTest.cmake"
+ )
+endmacro()
+
+add_RunCMake_test(build_command)
+add_RunCMake_test(find_package)
diff --git a/Tests/RunCMake/RunCMake.cmake b/Tests/RunCMake/RunCMake.cmake
new file mode 100644
index 0000000..2639463
--- /dev/null
+++ b/Tests/RunCMake/RunCMake.cmake
@@ -0,0 +1,69 @@
+foreach(arg
+ RunCMake_GENERATOR
+ RunCMake_SOURCE_DIR
+ RunCMake_BINARY_DIR
+ )
+ if(NOT DEFINED ${arg})
+ message(FATAL_ERROR "${arg} not given!")
+ endif()
+endforeach()
+
+function(run_cmake test)
+ set(top_src "${RunCMake_SOURCE_DIR}")
+ set(top_bin "${RunCMake_BINARY_DIR}")
+ if(EXISTS ${top_src}/${test}-result.txt)
+ file(READ ${top_src}/${test}-result.txt expect_result)
+ string(REGEX REPLACE "\n+$" "" expect_result "${expect_result}")
+ else()
+ set(expect_result 0)
+ endif()
+ foreach(o out err)
+ if(EXISTS ${top_src}/${test}-std${o}.txt)
+ file(READ ${top_src}/${test}-std${o}.txt expect_std${o})
+ string(REGEX REPLACE "\n+$" "" expect_std${o} "${expect_std${o}}")
+ else()
+ unset(expect_std${o})
+ endif()
+ endforeach()
+ set(source_dir "${top_src}")
+ set(binary_dir "${top_bin}/${test}-build")
+ file(REMOVE_RECURSE "${binary_dir}")
+ file(MAKE_DIRECTORY "${binary_dir}")
+ execute_process(
+ COMMAND ${CMAKE_COMMAND} "${source_dir}"
+ -G "${RunCMake_GENERATOR}" -DRunCMake_TEST=${test}
+ WORKING_DIRECTORY "${binary_dir}"
+ OUTPUT_VARIABLE actual_stdout
+ ERROR_VARIABLE actual_stderr
+ RESULT_VARIABLE actual_result
+ )
+ set(msg "")
+ if(NOT "${actual_result}" STREQUAL "${expect_result}")
+ set(msg "${msg}Result is [${actual_result}], not [${expect_result}].\n")
+ endif()
+ foreach(o out err)
+ string(REGEX REPLACE "\n+$" "" actual_std${o} "${actual_std${o}}")
+ set(expect_${o} "")
+ if(DEFINED expect_std${o})
+ if(NOT "${actual_std${o}}" MATCHES "${expect_std${o}}")
+ string(REGEX REPLACE "\n" "\n expect-${o}> " expect_${o}
+ " expect-${o}> ${expect_std${o}}")
+ set(expect_${o} "Expected std${o} to match:\n${expect_${o}}\n")
+ set(msg "${msg}std${o} does not match that expected.\n")
+ endif()
+ endif()
+ endforeach()
+ if(msg)
+ string(REGEX REPLACE "\n" "\n actual-out> " actual_out " actual-out> ${actual_stdout}")
+ string(REGEX REPLACE "\n" "\n actual-err> " actual_err " actual-err> ${actual_stderr}")
+ message(SEND_ERROR "${test} - FAILED:\n"
+ "${msg}"
+ "${expect_out}"
+ "Actual stdout:\n${actual_out}\n"
+ "${expect_err}"
+ "Actual stderr:\n${actual_err}\n"
+ )
+ else()
+ message(STATUS "${test} - PASSED")
+ endif()
+endfunction()
diff --git a/Tests/CMakeCommands/build_command/CMakeLists.txt b/Tests/RunCMake/build_command/CMakeLists.txt
index 990ac90..0fbb948 100644
--- a/Tests/CMakeCommands/build_command/CMakeLists.txt
+++ b/Tests/RunCMake/build_command/CMakeLists.txt
@@ -1,3 +1,7 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
+
# This CMakeLists file is *sometimes expected* to result in a configure error.
#
# expect this to succeed:
@@ -12,12 +16,9 @@
# ...even purposefully calling it with known-bad argument lists to cover
# error handling code.
#
-cmake_minimum_required(VERSION 2.8)
-project(test_build_command)
set(cmd "initial")
-message("CTEST_FULL_OUTPUT")
message("0. begin")
if(TEST_ERROR_CONDITIONS)
diff --git a/Tests/RunCMake/build_command/ErrorsOFF-stderr.txt b/Tests/RunCMake/build_command/ErrorsOFF-stderr.txt
new file mode 100644
index 0000000..331885b
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsOFF-stderr.txt
@@ -0,0 +1 @@
+skipping cases 1, 2 and 3 because TEST_ERROR_CONDITIONS is OFF
diff --git a/Tests/RunCMake/build_command/ErrorsOFF-stdout.txt b/Tests/RunCMake/build_command/ErrorsOFF-stdout.txt
new file mode 100644
index 0000000..cf66a9d
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsOFF-stdout.txt
@@ -0,0 +1 @@
+Build files have been written to:
diff --git a/Tests/RunCMake/build_command/ErrorsOFF.cmake b/Tests/RunCMake/build_command/ErrorsOFF.cmake
new file mode 100644
index 0000000..a243fab
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsOFF.cmake
@@ -0,0 +1 @@
+set(TEST_ERROR_CONDITIONS OFF)
diff --git a/Tests/RunCMake/build_command/ErrorsON-result.txt b/Tests/RunCMake/build_command/ErrorsON-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsON-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/build_command/ErrorsON-stderr.txt b/Tests/RunCMake/build_command/ErrorsON-stderr.txt
new file mode 100644
index 0000000..0be7475
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsON-stderr.txt
@@ -0,0 +1,12 @@
+CMake Error at CMakeLists.txt:[0-9]+ \(build_command\):
+ build_command requires at least one argument naming a CMake variable
+
++
+1. cmd='initial'
+CMake Error at CMakeLists.txt:[0-9]+ \(build_command\):
+ build_command unknown argument "BOGUS"
+
++
+2. cmd='initial'
+CMake Error at CMakeLists.txt:[0-9]+ \(build_command\):
+ build_command unknown argument "STUFF"
diff --git a/Tests/RunCMake/build_command/ErrorsON-stdout.txt b/Tests/RunCMake/build_command/ErrorsON-stdout.txt
new file mode 100644
index 0000000..841dd0d
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsON-stdout.txt
@@ -0,0 +1 @@
+Configuring incomplete, errors occurred!
diff --git a/Tests/RunCMake/build_command/ErrorsON.cmake b/Tests/RunCMake/build_command/ErrorsON.cmake
new file mode 100644
index 0000000..27814bf
--- /dev/null
+++ b/Tests/RunCMake/build_command/ErrorsON.cmake
@@ -0,0 +1 @@
+set(TEST_ERROR_CONDITIONS ON)
diff --git a/Tests/RunCMake/build_command/RunCMakeTest.cmake b/Tests/RunCMake/build_command/RunCMakeTest.cmake
new file mode 100644
index 0000000..4525c57
--- /dev/null
+++ b/Tests/RunCMake/build_command/RunCMakeTest.cmake
@@ -0,0 +1,4 @@
+include(RunCMake)
+
+run_cmake(ErrorsOFF)
+run_cmake(ErrorsON)
diff --git a/Tests/RunCMake/find_package/CMakeLists.txt b/Tests/RunCMake/find_package/CMakeLists.txt
new file mode 100644
index 0000000..e8db6b0
--- /dev/null
+++ b/Tests/RunCMake/find_package/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/find_package/MissingConfig-stderr.txt b/Tests/RunCMake/find_package/MissingConfig-stderr.txt
new file mode 100644
index 0000000..1eae0bb
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfig-stderr.txt
@@ -0,0 +1,19 @@
+CMake Warning at MissingConfig.cmake:1 \(find_package\):
+ Could not find a package configuration file provided by "NotHere" with any
+ of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+
+
+CMake Warning at MissingConfig.cmake:2 \(message\):
+ This warning must be reachable.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)$
diff --git a/Tests/RunCMake/find_package/MissingConfig.cmake b/Tests/RunCMake/find_package/MissingConfig.cmake
new file mode 100644
index 0000000..238e7e4
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfig.cmake
@@ -0,0 +1,2 @@
+find_package(NotHere CONFIG)
+message(WARNING "This warning must be reachable.")
diff --git a/Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt b/Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt
new file mode 100644
index 0000000..10e71fa
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfigOneName-stderr.txt
@@ -0,0 +1,10 @@
+CMake Warning at MissingConfigOneName.cmake:1 \(find_package\):
+ Could not find a package configuration file named "NotHereConfig.cmake"
+ provided by package "NotHere".
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/find_package/MissingConfigOneName.cmake b/Tests/RunCMake/find_package/MissingConfigOneName.cmake
new file mode 100644
index 0000000..11676a9
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfigOneName.cmake
@@ -0,0 +1 @@
+find_package(NotHere CONFIGS NotHereConfig.cmake)
diff --git a/Tests/RunCMake/find_package/MissingConfigRequired-result.txt b/Tests/RunCMake/find_package/MissingConfigRequired-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfigRequired-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt b/Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt
new file mode 100644
index 0000000..2ba774a
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfigRequired-stderr.txt
@@ -0,0 +1,13 @@
+CMake Error at MissingConfigRequired.cmake:1 \(find_package\):
+ Could not find a package configuration file provided by "NotHere" with any
+ of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)$
diff --git a/Tests/RunCMake/find_package/MissingConfigRequired.cmake b/Tests/RunCMake/find_package/MissingConfigRequired.cmake
new file mode 100644
index 0000000..0ae6702
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfigRequired.cmake
@@ -0,0 +1,2 @@
+find_package(NotHere CONFIG REQUIRED)
+message(FATAL_ERROR "This error must not be reachable.")
diff --git a/Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt b/Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt
new file mode 100644
index 0000000..2f5086e
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfigVersion-stderr.txt
@@ -0,0 +1,13 @@
+CMake Warning at MissingConfigVersion.cmake:1 \(find_package\):
+ Could not find a package configuration file provided by "NotHere"
+ \(requested version 1\.2\) with any of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/find_package/MissingConfigVersion.cmake b/Tests/RunCMake/find_package/MissingConfigVersion.cmake
new file mode 100644
index 0000000..ac35a79
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingConfigVersion.cmake
@@ -0,0 +1 @@
+find_package(NotHere 1.2 CONFIG)
diff --git a/Tests/RunCMake/find_package/MissingModule-stderr.txt b/Tests/RunCMake/find_package/MissingModule-stderr.txt
new file mode 100644
index 0000000..2ad460f
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingModule-stderr.txt
@@ -0,0 +1,26 @@
+CMake Warning at MissingModule.cmake:1 \(find_package\):
+ No "FindNotHere.cmake" found in CMAKE_MODULE_PATH.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+
+
+CMake Warning \(dev\) at MissingModule.cmake:1 \(find_package\):
+ FindNotHere.cmake must either be part of this project itself, in this case
+ adjust CMAKE_MODULE_PATH so that it points to the correct location inside
+ its source tree.
+
+ Or it must be installed by a package which has already been found via
+ find_package\(\). In this case make sure that package has indeed been found
+ and adjust CMAKE_MODULE_PATH to contain the location where that package has
+ installed FindNotHere.cmake. This must be a location provided by that
+ package. This error in general means that the buildsystem of this project
+ is relying on a Find-module without ensuring that it is actually available.
+
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+This warning is for project developers. Use -Wno-dev to suppress it.
+
+CMake Warning at MissingModule.cmake:2 \(message\):
+ This warning must be reachable.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)$
diff --git a/Tests/RunCMake/find_package/MissingModule.cmake b/Tests/RunCMake/find_package/MissingModule.cmake
new file mode 100644
index 0000000..76bcef2
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingModule.cmake
@@ -0,0 +1,2 @@
+find_package(NotHere MODULE)
+message(WARNING "This warning must be reachable.")
diff --git a/Tests/RunCMake/find_package/MissingModuleRequired-result.txt b/Tests/RunCMake/find_package/MissingModuleRequired-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingModuleRequired-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt b/Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt
new file mode 100644
index 0000000..fec05f1
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingModuleRequired-stderr.txt
@@ -0,0 +1,21 @@
+CMake Error at MissingModuleRequired.cmake:1 \(find_package\):
+ No "FindNotHere.cmake" found in CMAKE_MODULE_PATH.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+
+
+CMake Warning \(dev\) at MissingModuleRequired.cmake:1 \(find_package\):
+ FindNotHere.cmake must either be part of this project itself, in this case
+ adjust CMAKE_MODULE_PATH so that it points to the correct location inside
+ its source tree.
+
+ Or it must be installed by a package which has already been found via
+ find_package\(\). In this case make sure that package has indeed been found
+ and adjust CMAKE_MODULE_PATH to contain the location where that package has
+ installed FindNotHere.cmake. This must be a location provided by that
+ package. This error in general means that the buildsystem of this project
+ is relying on a Find-module without ensuring that it is actually available.
+
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+This warning is for project developers. Use -Wno-dev to suppress it.$
diff --git a/Tests/RunCMake/find_package/MissingModuleRequired.cmake b/Tests/RunCMake/find_package/MissingModuleRequired.cmake
new file mode 100644
index 0000000..897eda6
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingModuleRequired.cmake
@@ -0,0 +1,2 @@
+find_package(NotHere MODULE REQUIRED)
+message(FATAL_ERROR "This error must not be reachable.")
diff --git a/Tests/RunCMake/find_package/MissingNormal-stderr.txt b/Tests/RunCMake/find_package/MissingNormal-stderr.txt
new file mode 100644
index 0000000..f4c6fba
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormal-stderr.txt
@@ -0,0 +1,23 @@
+CMake Warning at MissingNormal.cmake:1 \(find_package\):
+ By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+ asked CMake to find a package configuration file provided by "NotHere", but
+ CMake did not find one.
+
+ Could not find a package configuration file provided by "NotHere" with any
+ of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+
+
+CMake Warning at MissingNormal.cmake:2 \(message\):
+ This warning must be reachable.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)$
diff --git a/Tests/RunCMake/find_package/MissingNormal.cmake b/Tests/RunCMake/find_package/MissingNormal.cmake
new file mode 100644
index 0000000..fb90e01
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormal.cmake
@@ -0,0 +1,2 @@
+find_package(NotHere)
+message(WARNING "This warning must be reachable.")
diff --git a/Tests/RunCMake/find_package/MissingNormalRequired-result.txt b/Tests/RunCMake/find_package/MissingNormalRequired-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalRequired-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt b/Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt
new file mode 100644
index 0000000..7bb7902
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalRequired-stderr.txt
@@ -0,0 +1,17 @@
+CMake Error at MissingNormalRequired.cmake:1 \(find_package\):
+ By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+ asked CMake to find a package configuration file provided by "NotHere", but
+ CMake did not find one.
+
+ Could not find a package configuration file provided by "NotHere" with any
+ of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)$
diff --git a/Tests/RunCMake/find_package/MissingNormalRequired.cmake b/Tests/RunCMake/find_package/MissingNormalRequired.cmake
new file mode 100644
index 0000000..33353d8
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalRequired.cmake
@@ -0,0 +1,2 @@
+find_package(NotHere REQUIRED)
+message(FATAL_ERROR "This error must not be reachable.")
diff --git a/Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt b/Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt
new file mode 100644
index 0000000..36de800
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalVersion-stderr.txt
@@ -0,0 +1,17 @@
+CMake Warning at MissingNormalVersion.cmake:1 \(find_package\):
+ By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+ asked CMake to find a package configuration file provided by "NotHere", but
+ CMake did not find one.
+
+ Could not find a package configuration file provided by "NotHere"
+ \(requested version 1\.2\) with any of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/find_package/MissingNormalVersion.cmake b/Tests/RunCMake/find_package/MissingNormalVersion.cmake
new file mode 100644
index 0000000..2d9ce4e
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalVersion.cmake
@@ -0,0 +1 @@
+find_package(NotHere 1.2)
diff --git a/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt
new file mode 100644
index 0000000..d34f23c
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew-stderr.txt
@@ -0,0 +1,30 @@
+CMake Warning \(dev\) at MissingNormalWarnNoModuleNew.cmake:3 \(find_package\):
+ find_package called without either MODULE or CONFIG option and no
+ FindNotHere.cmake module is in CMAKE_MODULE_PATH. Add MODULE to
+ exclusively request Module mode and fail if FindNotHere.cmake is missing.
+ Add CONFIG to exclusively request Config mode and search for a package
+ configuration file provided by NotHere \(NotHereConfig.cmake or
+ nothere-config.cmake\).
+
+ \(Variable CMAKE_FIND_PACKAGE_WARN_NO_MODULE enabled this warning.\)
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+This warning is for project developers. Use -Wno-dev to suppress it.
+
+CMake Warning at MissingNormalWarnNoModuleNew.cmake:3 \(find_package\):
+ By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+ asked CMake to find a package configuration file provided by "NotHere", but
+ CMake did not find one.
+
+ Could not find a package configuration file provided by "NotHere" with any
+ of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake
new file mode 100644
index 0000000..0211249
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleNew.cmake
@@ -0,0 +1,3 @@
+set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
+set(CMAKE_MINIMUM_REQUIRED_VERSION 2.8.8)
+find_package(NotHere)
diff --git a/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt
new file mode 100644
index 0000000..b336b56
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld-stderr.txt
@@ -0,0 +1,29 @@
+CMake Warning \(dev\) at MissingNormalWarnNoModuleOld.cmake:2 \(find_package\):
+ find_package called without NO_MODULE option and no FindNotHere.cmake
+ module is in CMAKE_MODULE_PATH. Add NO_MODULE to exclusively request
+ Config mode and search for a package configuration file provided by NotHere
+ \(NotHereConfig.cmake or nothere-config.cmake\). Otherwise make
+ FindNotHere.cmake available in CMAKE_MODULE_PATH.
+
+ \(Variable CMAKE_FIND_PACKAGE_WARN_NO_MODULE enabled this warning.\)
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
+This warning is for project developers. Use -Wno-dev to suppress it.
+
+CMake Warning at MissingNormalWarnNoModuleOld.cmake:2 \(find_package\):
+ By not providing "FindNotHere.cmake" in CMAKE_MODULE_PATH this project has
+ asked CMake to find a package configuration file provided by "NotHere", but
+ CMake did not find one.
+
+ Could not find a package configuration file provided by "NotHere" with any
+ of the following names:
+
+ NotHereConfig.cmake
+ nothere-config.cmake
+
+ Add the installation prefix of "NotHere" to CMAKE_PREFIX_PATH or set
+ "NotHere_DIR" to a directory containing one of the above files. If
+ "NotHere" provides a separate development package or SDK, be sure it has
+ been installed.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake
new file mode 100644
index 0000000..1c4a775
--- /dev/null
+++ b/Tests/RunCMake/find_package/MissingNormalWarnNoModuleOld.cmake
@@ -0,0 +1,2 @@
+set(CMAKE_FIND_PACKAGE_WARN_NO_MODULE 1)
+find_package(NotHere)
diff --git a/Tests/RunCMake/find_package/MixedModeOptions-result.txt b/Tests/RunCMake/find_package/MixedModeOptions-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/find_package/MixedModeOptions-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/find_package/MixedModeOptions-stderr.txt b/Tests/RunCMake/find_package/MixedModeOptions-stderr.txt
new file mode 100644
index 0000000..b867022
--- /dev/null
+++ b/Tests/RunCMake/find_package/MixedModeOptions-stderr.txt
@@ -0,0 +1,14 @@
+CMake Error at MixedModeOptions.cmake:1 \(find_package\):
+ find_package given options exclusive to Module mode:
+
+ MODULE
+
+ and options exclusive to Config mode:
+
+ CONFIG
+ CONFIGS
+ NO_DEFAULT_PATH
+
+ The options are incompatible.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/find_package/MixedModeOptions.cmake b/Tests/RunCMake/find_package/MixedModeOptions.cmake
new file mode 100644
index 0000000..7f78ee0
--- /dev/null
+++ b/Tests/RunCMake/find_package/MixedModeOptions.cmake
@@ -0,0 +1 @@
+find_package(NotHere MODULE CONFIG CONFIGS NotHereConfig.cmake NO_DEFAULT_PATH)
diff --git a/Tests/RunCMake/find_package/RunCMakeTest.cmake b/Tests/RunCMake/find_package/RunCMakeTest.cmake
new file mode 100644
index 0000000..ba57f99
--- /dev/null
+++ b/Tests/RunCMake/find_package/RunCMakeTest.cmake
@@ -0,0 +1,14 @@
+include(RunCMake)
+
+run_cmake(MissingNormal)
+run_cmake(MissingNormalRequired)
+run_cmake(MissingNormalVersion)
+run_cmake(MissingNormalWarnNoModuleOld)
+run_cmake(MissingNormalWarnNoModuleNew)
+run_cmake(MissingModule)
+run_cmake(MissingModuleRequired)
+run_cmake(MissingConfig)
+run_cmake(MissingConfigOneName)
+run_cmake(MissingConfigRequired)
+run_cmake(MissingConfigVersion)
+run_cmake(MixedModeOptions)
diff --git a/Tests/SBCS/CMakeLists.txt b/Tests/SBCS/CMakeLists.txt
new file mode 100644
index 0000000..b3c3c2c
--- /dev/null
+++ b/Tests/SBCS/CMakeLists.txt
@@ -0,0 +1,6 @@
+# a SBCS test case
+project (SBCS)
+
+add_definitions(-D_SBCS)
+
+add_executable (SBCS SBCS.cxx)
diff --git a/Tests/SBCS/SBCS.cxx b/Tests/SBCS/SBCS.cxx
new file mode 100644
index 0000000..6ce2c9f
--- /dev/null
+++ b/Tests/SBCS/SBCS.cxx
@@ -0,0 +1,22 @@
+// Test to verify that _SBCS being defined causes CharacterSet to be set to 0 (Single Byte Character Set)
+
+int main ()
+{
+#ifdef _UNICODE
+ bool UnicodeSet=true;
+#else
+ bool UnicodeSet=false;
+#endif
+
+#ifdef _MBCS
+ bool MBCSSet=true;
+#else
+ bool MBCSSet=false;
+#endif
+
+ // if neither _UNICODE nor _MBCS is set, CharacterSet must be set to SBCS.
+ bool SBCSSet=(!UnicodeSet && !MBCSSet);
+
+ // Reverse boolean to indicate error case correctly
+ return !SBCSSet;
+}
diff --git a/Utilities/Release/Cygwin/cygwin-setup.hint.in b/Utilities/Release/Cygwin/cygwin-setup.hint.in
index 9706c0d..a2532fc 100644
--- a/Utilities/Release/Cygwin/cygwin-setup.hint.in
+++ b/Utilities/Release/Cygwin/cygwin-setup.hint.in
@@ -1,5 +1,5 @@
# CMake setup.hint file for cygwin setup.exe program
-category: Devel
-requires: @CMAKE_NCURSES_VERSION@ cygwin
-sdesc: "A cross platform build manager"
-ldesc: "CMake is a cross platform build manager. It allows you to specify build parameters for C and C++ programs in a cross platform manner. For cygwin Makefiles will be generated. CMake is also capable of generating microsoft project files, nmake, and borland makefiles. CMake can also perform system inspection operations like finding installed libraries and header files."
+category: Devel
+requires: libgcc1 libidn11 @CMAKE_NCURSES_VERSION@ libstdc++6
+sdesc: "A cross platform build manager"
+ldesc: "CMake is a cross platform build manager. It allows you to specify build parameters for C and C++ programs in a cross platform manner. For cygwin Makefiles will be generated. CMake is also capable of generating microsoft project files, nmake, and borland makefiles. CMake can also perform system inspection operations like finding installed libraries and header files."
diff --git a/Utilities/cmcurl/CMakeLists.txt b/Utilities/cmcurl/CMakeLists.txt
index 29ce25d6..caa44f1 100644
--- a/Utilities/cmcurl/CMakeLists.txt
+++ b/Utilities/cmcurl/CMakeLists.txt
@@ -126,9 +126,9 @@ IF(CURL_MALLOC_DEBUG)
ENDIF(CURL_MALLOC_DEBUG)
# On windows preload settings
-IF(WIN32)
+IF(WIN32 AND NOT MINGW)
INCLUDE(${LIBCURL_SOURCE_DIR}/Platforms/WindowsCache.cmake)
-ENDIF(WIN32)
+ENDIF()
# This macro checks if the symbol exists in the library and if it
# does, it appends library to the list.
diff --git a/bootstrap b/bootstrap
index f5eacbd..3be3d1f 100755
--- a/bootstrap
+++ b/bootstrap
@@ -127,10 +127,20 @@ fi
cmake_bootstrap_dir="${cmake_binary_dir}/Bootstrap${_cmk}"
# Helper function to fix windows paths.
-cmake_fix_slashes ()
-{
- echo "$1" | sed 's/\\/\//g'
-}
+case "${cmake_system}" in
+*MINGW*)
+ cmake_fix_slashes()
+ {
+ cmd //c echo "$(echo "$1" | sed 's/\\/\//g')" | sed 's/^"//;s/" *$//'
+ }
+ ;;
+*)
+ cmake_fix_slashes()
+ {
+ echo "$1" | sed 's/\\/\//g'
+ }
+ ;;
+esac
# Choose the default install prefix.
if ${cmake_system_mingw}; then
@@ -198,6 +208,7 @@ CMAKE_CXX_SOURCES="\
cmExportInstallFileGenerator \
cmInstallDirectoryGenerator \
cmGeneratedFileStream \
+ cmGeneratorTarget \
cmGeneratorExpression \
cmGlobalGenerator \
cmLocalGenerator \
diff --git a/cmake.1 b/cmake.1
deleted file mode 100644
index c7695b4..0000000
--- a/cmake.1
+++ /dev/null
@@ -1,112 +0,0 @@
-.\" Hey, EMACS: -*- nroff -*-
-.\" First parameter, NAME, should be all caps
-.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
-.\" other parameters are allowed: see man(7), man(1)
-.TH CMAKE 1 "August 8, 2002"
-.\" Please adjust this date whenever revising the manpage.
-.\"
-.\" Some roff macros, for reference:
-.\" .nh disable hyphenation
-.\" .hy enable hyphenation
-.\" .ad l left justify
-.\" .ad b justify to both left and right margins
-.\" .nf disable filling
-.\" .fi enable filling
-.\" .br insert line break
-.\" .sp <n> insert n+1 empty lines
-.\" for manpage-specific macros, see man(7)
-.SH NAME
-cmake \- Cross-platform Makefile generator.
-.SH SYNOPSIS
-.B cmake
-.RI < path-to-source > " " [ options ]
-.br
-.B ccmake
-.RI < path-to-source >
-.br
-.B ctest
-.RI [ -R " " < regex > ]
-.br
-.B cmaketest
-.RI < test-src-dir > " " < test-bin-dir > " " < test-executable >
-.SH DESCRIPTION
-
-This manual page documents briefly the \fBcmake\fP, \fBccmake\fP,
-\fBctest\fP and \fBcmaketest\fP commands. It is not intended to aid
-authors of CMakeLists.txt files or to describe all advanced options
-available. For full documentation, please visit
-\fBhttp://www.cmake.org\fP.
-
-.PP
-.\" TeX users may be more comfortable with the \fB<whatever>\fP and
-.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
-.\" respectively.
-
-CMake provides developers with a means of building their project on
-multiple platforms while writing only one build system configuration.
-The developer writes a set of CMakeLists.txt files that are read by
-CMake and used to generate a native build system for the current
-environment. On unix platforms, Makefiles are generated.
-
-.PP
-
-\fBcmake\fP is used to generate the makefiles for a project from its
-source. The first argument should specify a path to the source tree.
-The current directory will be used as the build tree for the project.
-Both in-source and out-of-source builds are supported, but
-out-of-source builds are preferred. CMake provides functionality for
-tailoring the build to user preferences through settings in the cmake
-cache. Options may be set interactively using the -i option (or
-\fBccmake\fP). Once CMake has generated the makefiles in the build
-tree, one may use the standard \fBmake\fP tool to build the project.
-
-.PP
-
-\fBccmake\fP provides a curses interface front-end for \fBcmake\fP.
-The interface allows users to interactively configure the build
-options stored in the cmake cache. This is the preferred interface
-for interactive builds. Build scripts should use \fBcmake\fP
-directly.
-
-.PP
-
-\fBctest\fP runs tests found in the project's build tree after it has
-been compiled and displays a summary of test results. Use the -R
-option to specify a regular expression of test names to match.
-
-\fBcmaketest\fP is provided to simplify project testing scripts. It
-allows a CMake project to be compiled and tested from a single command
-line.
-
-.SH OPTIONS
-
-.TP
-.B \-\-help
-Available for \fBcmake\fP , \fBccmake\fP and \fBcmaketest\fP.
-.br
-Show version number and summary of options.
-
-.TP
-.B -R regex
-Available for \fBctest\fP.
-.br
-Run only tests matching the given regular expression.
-
-.TP
-.B -i
-Available for \fBcmake\fP.
-.br
-Run cmake in an interactive wizard mode to configure the build.
-
-.SH SEE ALSO
-.BR Dart (1),
-.BR VTK (1).
-
-.SH MAILING LIST
-For help using cmake, a mailing list is provided at
-\fBcmake@www.cmake.org\fP. Please first read the full documentation
-at \fBhttp://www.cmake.org\fP before posting questions to the list.
-
-.SH AUTHOR
-This manual page was written by CMake authors at Kitware
-<kitware@kitware.com>.